Conky 1.5.0 -- client/server prototype
authorPhilip Kovacs <pkovacs@users.sourceforge.net>
Sat, 23 Dec 2006 06:01:16 +0000 (06:01 +0000)
committerPhilip Kovacs <pkovacs@users.sourceforge.net>
Sat, 23 Dec 2006 06:01:16 +0000 (06:01 +0000)
git-svn-id: https://conky.svn.sourceforge.net/svnroot/conky/trunk/conky1@818 7f574dfc-610e-0410-a909-a81674777703

25 files changed:
ChangeLog
README
app-admin/conky/conky-1.999.ebuild
autogen.sh
configure.ac.in
doc/config_settings.xml
doc/conky.1
doc/conkyrc.sample
doc/docs.xml
extras/nano/conky.nanorc
extras/vim/syntax/conkyrc.vim
src/Makefile.am
src/audacious.c
src/common.c
src/conky.c
src/conky.h
src/freebsd.c
src/linux.c
src/netbsd.c
src/remotec.c [deleted file]
src/remotec.h [deleted file]
src/remoted.c [deleted file]
src/remoted.h [deleted file]
src/timed_thread.c
src/x11.c

index 9042e5d..dd8d4ed 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
 # $Id$
 
+2006-12-22
+       * client/server infrastructure and prototype for linux only (so far):
+               - requires libdexter (http://sourceforge.net/projects/libdexter)
+               and the dxt-sysinfo plugin (svn only at the moment).
+       * new config items:
+               - dexter_client yes/no
+               - dexter_server yes/no
+               - dexter_config /path/to/libdexter/config (default: $HOME/.dexterrc)
+               - own_window_class <WM Class Name> (default: Conky)
+                       - replaces wm_class_name
+               - own_window_title <Window Title> (default: <hostname> - conky)
+       * removed config items:
+               - wm_class_name (use own_window_class, same function)
+       * configure changes:
+         --disable-network (default=yes) with auto-detection for libdexter.
+               - remove useless --enable-proc-uptime (PROC_UPTIME never referenced).  
+                       HAVE_SYSINFO and others determine if /proc/uptime is used.
+               - silently disable xft, double-buffer and xdamage if no x11.
+               - change enable/disable labels to reflect defaults accurately.
+               - simplified compile-based checks for sysinfo/getloadavg and by moving
+                 them into AC_CHECK_FUNCS.
+       * allow decorated, own_window=yes windows to be given input focus by WM:
+               - do not pass button clicks through to desktop in this scenario as conky
+                 immediately loses focus.  
+
 2006-12-13
        * Clarify LGPL license on timed_thread modules.
        * Update NEWS files.
diff --git a/README b/README
index 5da32d9..0b4e1fc 100644 (file)
--- a/README
+++ b/README
@@ -43,10 +43,10 @@ COMPILING
 
        ./configure     --prefix=/usr      --mandir=/usr/share/man       --in-
        fodir=/usr/share/info  --datadir=/usr/share  --sysconfdir=/etc --local-
-       statedir=/var/lib --enable-xft --enable-own-window --enable-proc-uptime
-       --enable-audacious  --enable-bmpx  --enable-hddtemp  --enable-mpd --en-
-       able-xmms2  --enable-imlib2   --enable-portmon  --enable-debug   --en-
-       able-double-buffer --enable-xdamage --enable-x11
+       statedir=/var/lib --disable-own-window --enable-audacious --enable-bmpx
+       --disable-hddtemp --disable-mpd --enable-xmms2 --disable-portmon --dis-
+       able-network   --enable-debug   --disable-x11   --disable-double-buffer
+       --disable-xdamage --disable-xft
 
        make
 
@@ -176,6 +176,20 @@ CONFIGURATION SETTINGS
              Default shading color and border's shading color
 
 
+       dexter_client
+             Act as client and connect to libdexter server for  remote  moni-
+             toring?
+
+
+       dexter_config
+             Full path to libdexter configuration file (default search order:
+             $HOME/.dexterrc; /etc/libdexter/dexter.conf)
+
+
+       dexter_server
+             Act as server for libdexter services?
+
+
        double_buffer
              Use the Xdbe extension? (eliminates flicker) It is highly recom-
              mended to use own window with this one so double buffer won't be
@@ -271,18 +285,8 @@ CONFIGURATION SETTINGS
              Boolean, create own window to draw?
 
 
-       own_window_transparent
-             Boolean, set pseudo-transparency?
-
-
-       own_window_type
-             if  own_window  is  yes, you may specify type normal, desktop or
-             override (default: normal).  Desktop windows are special windows
-             that  have  no  window  decorations;  are always visible on your
-             desktop; do not appear in your pager or taskbar; and are  sticky
-             across  all workspaces.  Override windows are not under the con-
-             trol of the window manager. Hints are ignored. This type of win-
-             dow can be useful for certain situations.
+       own_window_class
+             Manually set the WM_CLASS name. Defaults to "Conky".
 
 
        own_window_colour colour
@@ -299,6 +303,24 @@ CONFIGURATION SETTINGS
              no meaning and are ignored.
 
 
+       own_window_title
+             Manually  set the window name. Defaults to "<hostname> - conky".
+
+
+       own_window_transparent
+             Boolean, set pseudo-transparency?
+
+
+       own_window_type
+             if own_window is yes, you may specify type  normal,  desktop  or
+             override (default: normal).  Desktop windows are special windows
+             that have no window decorations;  are  always  visible  on  your
+             desktop;  do not appear in your pager or taskbar; and are sticky
+             across all workspaces.  Override windows are not under the  con-
+             trol of the window manager. Hints are ignored. This type of win-
+             dow can be useful for certain situations.
+
+
        out_to_console
              Print text to stdout.
 
@@ -307,9 +329,9 @@ CONFIGURATION SETTINGS
              Pad percentages to this many decimals (0 = no padding)
 
 
-       pop3   Default  global  POP3 server. Arguments are: "host user pass [-i
-             interval] [-p port] [-e command]". Default port is 110,  default
-             interval  is  5 minutes. If the password is supplied as '*', you
+       pop3   Default global POP3 server. Arguments are: "host user  pass  [-i
+             interval]  [-p port] [-e command]". Default port is 110, default
+             interval is 5 minutes. If the password is supplied as  '*',  you
              will be prompted to enter the password when Conky starts.
 
 
@@ -318,7 +340,7 @@ CONFIGURATION SETTINGS
 
 
        total_run_times
-             Total number of times for Conky to update before quitting.  Zero
+             Total  number of times for Conky to update before quitting. Zero
              makes Conky run forever
 
 
@@ -340,10 +362,6 @@ CONFIGURATION SETTINGS
              Use Xft (anti-aliased font and stuff)
 
 
-       wm_class_name
-             Manually set the WM_CLASS name. Defaults to "conky".
-
-
        xftalpha
              Alpha of Xft font. Must be a value at or between 1 and 0.
 
@@ -356,10 +374,10 @@ CONFIGURATION SETTINGS
 
 
 VARIABLES
-       Colors  are  parsed using XParsecolor(), there might be a list of them:
-       /usr/X11R6/lib/X11/rgb.txt. Also,  <http://sedition.com/perl/rgb.html>.
-       Color  can  be also in #rrggbb format (hex).  Note that when displaying
-       bytes, power is 1024 and not 1000 so 1M really  means  1024*1024         bytes
+       Colors are parsed using XParsecolor(), there might be a list  of         them:
+       /usr/X11R6/lib/X11/rgb.txt.  Also, <http://sedition.com/perl/rgb.html>.
+       Color can be also in #rrggbb format (hex).  Note that  when  displaying
+       bytes,  power  is  1024 and not 1000 so 1M really means 1024*1024 bytes
        and not 1000*1000.
 
        addr interface
@@ -407,7 +425,7 @@ VARIABLES
 
 
        apm_battery_time
-             Display  remaining  APM battery life in hh:mm:ss or "unknown" if
+             Display remaining APM battery life in hh:mm:ss or  "unknown"  if
              AC adapterstatus is on-line or charging (FreeBSD only)
 
 
@@ -464,13 +482,13 @@ VARIABLES
 
 
        battery (num)
-             Battery status and remaining percentage capacity of ACPI or  APM
-             battery.  ACPI  battery number can be given as argument (default
+             Battery  status and remaining percentage capacity of ACPI or APM
+             battery. ACPI battery number can be given as  argument  (default
              is BAT0).
 
 
        battery_time (num)
-             Battery charge/discharge time remaining of  ACPI  battery.  ACPI
+             Battery  charge/discharge  time  remaining of ACPI battery. ACPI
              battery number can be given as argument (default is BAT0).
 
 
@@ -510,28 +528,28 @@ VARIABLES
 
 
        cpu (cpuN)
-             CPU  usage  in percents. For SMP machines, the CPU number can be
-             provided as an argument. ${cpu 0} is the total usage, and  ${cpu
+             CPU usage in percents. For SMP machines, the CPU number  can  be
+             provided  as an argument. ${cpu 0} is the total usage, and ${cpu
              X} (X >= 1) are individual CPUs.
 
 
        cpubar (cpu number) (height),(width)
-             Bar  that shows CPU usage, height is bar's height in pixels. See
+             Bar that shows CPU usage, height is bar's height in pixels.  See
              $cpu for more info on SMP.
 
 
-       cpugraph (cpu number) (height),(width) (gradient         colour  1)  (gradient
+       cpugraph         (cpu  number)  (height),(width) (gradient colour 1) (gradient
        colour 2)
-             CPU usage graph, with optional colours in hex, minus the #.  See
+             CPU  usage graph, with optional colours in hex, minus the #. See
              $cpu for more info on SMP.
 
 
        diskio Displays current disk IO.
 
 
-       diskiograph  (height),(width)  (gradient         colour 1) (gradient colour 2)
+       diskiograph (height),(width) (gradient colour 1)         (gradient  colour  2)
        (scale)
-             Disk  IO graph, colours defined in hex, minus the #. If scale is
+             Disk IO graph, colours defined in hex, minus the #. If scale  is
              non-zero, it becomes the scale for the graph.
 
 
@@ -545,7 +563,7 @@ VARIABLES
 
        downspeedgraph  net  (height),(width)  (gradient         colour  1)  (gradient
        colour 2) (scale)
-             Download speed graph, colours defined in hex, minus  the  #.  If
+             Download  speed  graph,  colours defined in hex, minus the #. If
              scale is non-zero, it becomes the scale for the graph.
 
 
@@ -566,12 +584,12 @@ VARIABLES
 
        exec command
              Executes a shell command and displays the output in conky. warn-
-             ing: this takes a lot more resources than other  variables.  I'd
+             ing:  this  takes a lot more resources than other variables. I'd
              recommend coding wanted behaviour in C and posting a patch.
 
 
        execbar command
-             Same  as  exec,  except if the first value return is a value be-
+             Same as exec, except if the first value return is  a  value  be-
              tween 0-100, it will use that number for a bar. The size for the
              bar is currently fixed, but that may change in the future.
 
@@ -581,7 +599,7 @@ VARIABLES
 
 
        execi interval command
-             Same  as exec but with specific interval. Interval can't be less
+             Same as exec but with specific interval. Interval can't be  less
              than update_interval in configuration. See also $texeci
 
 
@@ -594,36 +612,36 @@ VARIABLES
 
 
        font (font)
-             Specify a different font. This new font will apply to  the  cur-
-             rent  line and everything following. You can use a $font with no
-             arguments to change back to the default  font  (much  like  with
+             Specify  a  different font. This new font will apply to the cur-
+             rent line and everything following. You can use a $font with  no
+             arguments  to  change  back  to the default font (much like with
              $color)
 
 
        freq (n)
-             Returns  CPU  #n's frequency in MHz. CPUs are counted from 1. If
+             Returns CPU #n's frequency in MHz. CPUs are counted from  1.  If
              omitted, the parameter defaults to 1.
 
 
        freq_g (n)
-             Returns CPU #n's frequency in GHz. CPUs are counted from  1.  If
+             Returns  CPU  #n's frequency in GHz. CPUs are counted from 1. If
              omitted, the parameter defaults to 1.
 
 
        freq_dyn
-             Returns  CPU  frequency in MHz, but is calculated by counting to
-             clock cycles to complete  an  instruction.  Only  available  for
+             Returns CPU frequency in MHz, but is calculated by  counting  to
+             clock  cycles  to  complete  an  instruction. Only available for
              x86/amd64.
 
 
        freq_dyn_g
-             Returns  CPU  frequency in GHz, but is calculated by counting to
-             clock cycles to complete  an  instruction.  Only  available  for
+             Returns CPU frequency in GHz, but is calculated by  counting  to
+             clock  cycles  to  complete  an  instruction. Only available for
              x86/amd64.
 
 
        fs_bar (height),(width) fs
-             Bar  that  shows how much space is used on a file system. height
+             Bar that shows how much space is used on a file  system.  height
              is the height in pixels. fs is any file on that file system.
 
 
@@ -647,14 +665,14 @@ VARIABLES
 
 
        hddtemp dev, (host,(port))
-             Displays temperature of a selected hard disk drive  as  reported
-             by  the  hddtemp  daemon  running on host:port.  Default host is
+             Displays  temperature  of a selected hard disk drive as reported
+             by the hddtemp daemon running on  host:port.   Default  host  is
              127.0.0.1, default port is 7634.
 
 
        head logfile lines (interval)
-             Displays first N lines of supplied text text file.  If  interval
-             is  not  supplied,  Conky assumes 2x Conky's interval. Max of 30
+             Displays  first  N lines of supplied text text file. If interval
+             is not supplied, Conky assumes 2x Conky's interval.  Max  of  30
              lines can be displayed, or until the text buffer is filled.
 
 
@@ -663,7 +681,7 @@ VARIABLES
 
 
        iconv_start codeset_from codeset_to
-             Convert text from one codeset to another using GNU iconv.  Needs
+             Convert  text from one codeset to another using GNU iconv. Needs
              to be stopped with iconv_stop.
 
 
@@ -672,75 +690,75 @@ VARIABLES
 
 
        i2c (dev) type n
-             I2C  sensor  from  sysfs  (Linux 2.6). dev may be omitted if you
-             have only one I2C device. type is either  in  (or  vol)  meaning
+             I2C sensor from sysfs (Linux 2.6). dev may  be  omitted  if  you
+             have  only  one  I2C  device. type is either in (or vol) meaning
              voltage, fan meaning fan or temp/tempf (first in C, second in F)
-             meaning  temperature.  n  is   number   of   the   sensor.   See
+             meaning   temperature.   n   is   number   of  the  sensor.  See
              /sys/bus/i2c/devices/ on your local computer.
 
 
        i8k_ac_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
-             whether ac power is on, as listed in  /proc/i8k  (translated  to
-             human-readable).  Beware  that this is by default not enabled by
+             If running the i8k kernel driver for Inspiron laptops,  displays
+             whether  ac  power  is on, as listed in /proc/i8k (translated to
+             human-readable). Beware that this is by default not  enabled  by
              i8k itself.
 
 
        i8k_bios
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              the bios version as listed in /proc/i8k.
 
 
        i8k_buttons_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the volume buttons status as listed in /proc/i8k.
 
 
        i8k_cpu_temp
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              the cpu temperature in Celsius, as reported by /proc/i8k.
 
 
        i8k_cpu_tempf
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the cpu temperature in Fahrenheit, as reported by /proc/i8k.
 
 
        i8k_left_fan_rpm
-             If running the i8k kernel driver for Inspiron laptops,  displays
-             the  left  fan's  rate of rotation, in revolutions per minute as
+             If  running the i8k kernel driver for Inspiron laptops, displays
+             the left fan's rate of rotation, in revolutions  per  minute  as
              listed in /proc/i8k. Beware, some laptops i8k reports these fans
              in reverse order.
 
 
        i8k_left_fan_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the left fan status as listed in /proc/i8k (translated to human-
-             readable).  Beware,  some  laptops i8k reports these fans in re-
+             readable). Beware, some laptops i8k reports these  fans  in  re-
              verse order.
 
 
        i8k_right_fan_rpm
-             If running the i8k kernel driver for Inspiron laptops,  displays
-             the  right  fan's rate of rotation, in revolutions per minute as
+             If  running the i8k kernel driver for Inspiron laptops, displays
+             the right fan's rate of rotation, in revolutions per  minute  as
              listed in /proc/i8k. Beware, some laptops i8k reports these fans
              in reverse order.
 
 
        i8k_right_fan_status
-             If  running the i8k kernel driver for Inspiron laptops, displays
-             the right fan status as listed in /proc/i8k (translated  to  hu-
-             man-readable).  Beware,  some  laptops i8k reports these fans in
+             If running the i8k kernel driver for Inspiron laptops,  displays
+             the  right  fan status as listed in /proc/i8k (translated to hu-
+             man-readable). Beware, some laptops i8k reports  these  fans  in
              reverse order.
 
 
        i8k_serial
-             If running the i8k kernel driver for Inspiron laptops,  displays
+             If  running the i8k kernel driver for Inspiron laptops, displays
              your laptop serial number as listed in /proc/i8k.
 
 
        i8k_version
-             If  running the i8k kernel driver for Inspiron laptops, displays
+             If running the i8k kernel driver for Inspiron laptops,  displays
              the version formatting of /proc/i8k.
 
 
@@ -749,13 +767,13 @@ VARIABLES
 
 
        ibm_temps N
-             If running the IBM ACPI, displays the temperatures from the  IBM
+             If  running the IBM ACPI, displays the temperatures from the IBM
              temperature sensors (N=0..7) Sensor 0 is on the CPU, 3 is on the
              GPU.
 
 
        ibm_volume
-             If running the IBM ACPI,  displays  the  "master"  volume,  con-
+             If  running  the  IBM  ACPI,  displays the "master" volume, con-
              trolled by the volume keys (0-14).
 
 
@@ -765,25 +783,25 @@ VARIABLES
 
 
        if_running (process)
-             if PROCESS is running, display  everything  if_running  and  the
+             if  PROCESS  is  running,  display everything if_running and the
              matching $endif
 
 
        if_existing (file)
-             if  FILE  exists, display everything between if_existing and the
+             if FILE exists, display everything between if_existing  and  the
              matching $endif
 
 
        if_mounted (mountpoint)
-             if MOUNTPOINT is mounted, display everything between  if_mounted
+             if  MOUNTPOINT is mounted, display everything between if_mounted
              and the matching $endif
 
 
        imap_messages (args)
              Displays the number of messages in your global IMAP inbox by de-
-             fault. You can define  individual  IMAP  inboxes  seperately  by
+             fault.  You  can  define  individual  IMAP inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i interval] [-p port] [-e command]". Default port is 143,  de-
+             [-i  interval] [-p port] [-e command]". Default port is 143, de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
@@ -792,7 +810,7 @@ VARIABLES
              Displays the number of unseen messages in your global IMAP inbox
              by default. You can define individual IMAP inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i  interval] [-p port] [-e command]". Default port is 143, de-
+             [-i interval] [-p port] [-e command]". Default port is 143,  de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
@@ -813,8 +831,8 @@ VARIABLES
              Machine, i686 for example
 
 
-       mails  Mail count in mail spool. You can use program like fetchmail  to
-             get  mails  from  some server using your favourite protocol. See
+       mails  Mail  count in mail spool. You can use program like fetchmail to
+             get mails from some server using your  favourite  protocol.  See
              also new_mails.
 
 
@@ -911,17 +929,17 @@ VARIABLES
 
        pb_battery item
              If running on Apple powerbook/ibook, display information on bat-
-             tery status. The item parameter specifies, what  information  to
+             tery  status.  The item parameter specifies, what information to
              display. Exactly one item must be specified. Valid items are:
 
              status: Display if battery is fully charged, charging, discharg-
              ing or absent (running on AC)
-             percent: Display charge of battery in percent,  if  charging  or
-             discharging.  Nothing  will  be  displayed,  if battery is fully
+             percent:  Display  charge  of battery in percent, if charging or
+             discharging. Nothing will be  displayed,  if  battery  is  fully
              charged or absent.
              time: Display the time remaining until the battery will be fully
-             charged  or discharged at current rate. Nothing is displayed, if
-             battery is absent or if it's present but fully charged  and  not
+             charged or discharged at current rate. Nothing is displayed,  if
+             battery  is  absent or if it's present but fully charged and not
              discharging.
 
 
@@ -929,17 +947,17 @@ VARIABLES
              Displays the number of unseen messages in your global POP3 inbox
              by default. You can define individual POP3 inboxes seperately by
              passing arguments to this object. Arguments are: "host user pass
-             [-i interval] [-p port] [-e command]". Default port is 110,  de-
+             [-i  interval] [-p port] [-e command]". Default port is 110, de-
              fault interval is 5 minutes. If the password is supplied as '*',
              you will be prompted to enter the password when Conky starts.
 
 
        pop3_used (args)
-             Displays the amount of space (in MiB, 2^20) used in your  global
-             POP3  inbox  by  default. You can define individual POP3 inboxes
-             seperately by passing arguments to this object.  Arguments  are:
-             "host  user  pass [-i interval] [-p port] [-e command]". Default
-             port is 110, default interval is 5 minutes. If the  password  is
+             Displays  the amount of space (in MiB, 2^20) used in your global
+             POP3 inbox by default. You can define  individual  POP3  inboxes
+             seperately  by  passing arguments to this object. Arguments are:
+             "host user pass [-i interval] [-p port] [-e  command]".  Default
+             port  is  110, default interval is 5 minutes. If the password is
              supplied as '*', you will be prompted to enter the password when
              Conky starts.
 
@@ -1001,36 +1019,36 @@ VARIABLES
              The connection index provides you with access to each connection
              in the port monitor. The monitor will return information for in-
              dex values from 0 to n-1 connections. Values higher than n-1 are
-             simply  ignored. For the "count" item, the connection index must
+             simply ignored. For the "count" item, the connection index  must
              be omitted. It is required for all other items.
 
              Examples:
-             ${tcp_portmon 6881 6999 count} - displays the number of  connec-
+             ${tcp_portmon  6881 6999 count} - displays the number of connec-
              tions in the bittorrent port range
-             ${tcp_portmon  22 22 rip 0} - displays the remote host ip of the
+             ${tcp_portmon 22 22 rip 0} - displays the remote host ip of  the
              first sshd connection
-             ${tcp_portmon 22 22 rip 9} - displays the remote host ip of  the
+             ${tcp_portmon  22 22 rip 9} - displays the remote host ip of the
              tenth sshd connection
              ${tcp_portmon 1 1024 rhost 0} - displays the remote host name of
              the first connection on a privileged port
              ${tcp_portmon 1 1024 rport 4} - displays the remote host port of
              the fifth connection on a privileged port
-             ${tcp_portmon  1 65535 lservice 14} - displays the local service
+             ${tcp_portmon 1 65535 lservice 14} - displays the local  service
              name of the fifteenth connection in the range of all ports
 
              Note that port monitor variables which share the same port range
              actually refer to the same monitor, so many references to a sin-
              gle port range for different items and different indexes all use
-             the  same monitor internally. In other words, the program avoids
+             the same monitor internally. In other words, the program  avoids
              creating redundant monitors.
 
        texeci interval command
-             Runs a command at an interval inside a thread and  displays  the
-             output.  Same  as  $execi,  except  the  command is run inside a
-             thread. Use this if you have a slow script to keep Conky  updat-
-             ing.  You should make the interval slightly longer then the time
-             it takes your script to execute. For  example,  if  you  have  a
-             script  that  take 5 seconds to execute, you should make the in-
+             Runs  a  command at an interval inside a thread and displays the
+             output. Same as $execi, except  the  command  is  run  inside  a
+             thread.  Use this if you have a slow script to keep Conky updat-
+             ing. You should make the interval slightly longer then the  time
+             it  takes  your  script  to  execute. For example, if you have a
+             script that take 5 seconds to execute, you should make  the  in-
              terval at least 6 seconds. See also $execi.
 
 
@@ -1049,7 +1067,7 @@ VARIABLES
 
 
        time (format)
-             Local  time, see man strftime to get more information about for-
+             Local time, see man strftime to get more information about  for-
              mat
 
 
@@ -1058,23 +1076,23 @@ VARIABLES
 
 
        tztime (timezone) (format)
-             Local time for specified timezone, see man strftime to get  more
-             information  about format. The timezone argument is specified in
-             similar fashion as TZ environment variable. For hints,  look  in
+             Local  time for specified timezone, see man strftime to get more
+             information about format. The timezone argument is specified  in
+             similar  fashion  as TZ environment variable. For hints, look in
              /usr/share/zoneinfo. e.g. US/Pacific, Europe/Zurich, etc.
 
 
        totaldown net
-             Total  download, overflows at 4 GB on Linux with 32-bit arch and
+             Total download, overflows at 4 GB on Linux with 32-bit arch  and
              there doesn't seem to be a way to know how many times it has al-
              ready done that before conky has started.
 
 
        top type, num
-             This  takes arguments in the form:top (name) (number) Basically,
-             processes are ranked from highest to lowest in terms of cpu  us-
-             age,  which  is  what  (num)  represents. The types are: "name",
-             "pid", "cpu", and "mem". There can be  a  max  of  10  processes
+             This takes arguments in the form:top (name) (number)  Basically,
+             processes  are ranked from highest to lowest in terms of cpu us-
+             age, which is what (num)  represents.  The  types  are:  "name",
+             "pid",  "cpu",  and  "mem".  There  can be a max of 10 processes
              listed.
 
 
@@ -1098,9 +1116,9 @@ VARIABLES
              Upload speed in kilobytes with one decimal
 
 
-       upspeedgraph  net (height),(width) (gradient colour 1) (gradient colour
+       upspeedgraph net (height),(width) (gradient colour 1) (gradient colour
        2) (scale)
-             Upload  speed  graph,  colours  defined  in hex, minus the #. If
+             Upload speed graph, colours defined in  hex,  minus  the  #.  If
              scale is non-zero, it becomes the scale for the graph.
 
 
@@ -1112,12 +1130,12 @@ VARIABLES
 
 
        voffset (pixels)
-             Change vertical offset by N pixels. Negative values  will  cause
+             Change  vertical  offset by N pixels. Negative values will cause
              text to overlap. See also $offset.
 
 
        voltage_mv (n)
-             Returns  CPU  #n's  voltage  in  mV. CPUs are counted from 1. If
+             Returns CPU #n's voltage in mV. CPUs  are  counted  from  1.  If
              omitted, the parameter defaults to 1.
 
 
@@ -1140,11 +1158,11 @@ FILES
 BUGS
        Drawing to root or some other desktop window directly doesn't work with
        all window managers. Especially doesn't work well with Gnome and it has
-       been reported that it doesn't work with KDE  either.  Nautilus  can  be
-       disabled         from  drawing  to  desktop with program gconf-editor. Uncheck
-       show_desktop in /apps/nautilus/preferences/.  There  is -w  switch  in
-       Conky  to  set  some  specific window id. You might find xwininfo -tree
-       useful to find the window to draw to. You  can  also  use  -o  argument
+       been  reported  that  it         doesn't work with KDE either. Nautilus can be
+       disabled from drawing to desktop         with  program  gconf-editor.  Uncheck
+       show_desktop  in         /apps/nautilus/preferences/.  There  is  -w switch in
+       Conky to set some specific window id. You  might         find  xwininfo  -tree
+       useful  to  find         the  window  to draw to. You can also use -o argument
        which makes Conky to create its own window.
 
 SEE ALSO
index a7f78ea..67a8cb0 100644 (file)
@@ -11,7 +11,7 @@ HOMEPAGE="http://conky.sf.net"
 LICENSE="BSD"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~ppc ~ppc64 ~sparc ~x86"
-IUSE="truetype X ipv6 audacious bmpx hddtemp mpd vim-syntax"
+IUSE="truetype X ipv6 audacious bmpx hddtemp mpd network vim-syntax"
 
 DEPEND_COMMON="
        virtual/libc
@@ -31,6 +31,9 @@ DEPEND_COMMON="
                bmpx? ( media-sound/bmpx
                                >=sys-apps/dbus-0.35
                        )
+               network? ( net-libs/libdexter
+                                       net-libs/dxt-plugins-sysinfo
+                               )
                !ipv6? ( >=dev-libs/glib-2.0 )
        )"
 
@@ -66,7 +69,7 @@ src_compile() {
                mymake="MPD_NO_IPV6=noipv6"
        fi
        local myconf
-       myconf="--enable-own-window --enable-proc-uptime"
+       myconf="--enable-own-window"
        use X && myconf="${myconf} --enable-x11 --enable-double-buffer --enable-xdamage"
        econf \
                ${myconf} \
@@ -74,6 +77,7 @@ src_compile() {
                $(use_enable audacious) \
                $(use_enable bmpx) \
                $(use_enable hddtemp ) \
+               $(use_enable network ) \
                $(use_enable mpd) \
                $(use_enable !ipv6 portmon) || die "econf failed"
        emake ${mymake} || die "compile failed"
index bb4b2cc..f925134 100755 (executable)
@@ -23,5 +23,5 @@ sed -e "s/@REVISION@/${revision}/g" \
 echo Running $ACLOCAL ... && $ACLOCAL
 echo Running $LIBTOOLIZE --force ... && $LIBTOOLIZE --force
 echo Running $AUTOHEADER ... && $AUTOHEADER
-echo Running $AUTOMAKE -a ... && $AUTOMAKE -a
+echo Running $AUTOMAKE --add-missing ... && $AUTOMAKE --add-missing
 echo Running $AUTOCONF ... && $AUTOCONF
index fead951..99c527e 100644 (file)
@@ -2,41 +2,47 @@ dnl $Id$
 
 dnl major, minor and micro version macros.
 m4_define([conky_version_major], [1])
-m4_define([conky_version_minor], [4])
-m4_define([conky_version_micro], [6])
+m4_define([conky_version_minor], [5])
+m4_define([conky_version_micro], [0])
 m4_define([conky_version_tag], [svn]) dnl [] for releases
 m4_define([conky_version_revision],[r@REVISION@])
 m4_define([conky_version], 
-         [conky_version_major().conky_version_minor().conky_version_micro()ifelse(
-               conky_version_tag(), [svn], 
-                       [-conky_version_tag()-conky_version_revision()],
-                       [ifelse(conky_version_tag(), [], [], [-conky_version_tag()])])])
+    [conky_version_major().conky_version_minor().conky_version_micro()ifelse(
+      conky_version_tag(), [svn], 
+      [-conky_version_tag()-conky_version_revision()],
+      [ifelse(conky_version_tag(), [], [], [-conky_version_tag()])])])
 
 AC_INIT([Conky], [conky_version()], [brenden1@users.sourceforge.net])
 
 AM_INIT_AUTOMAKE(conky, conky_version())
 AM_CONFIG_HEADER(src/config.h)
-dnl
-dnl C Compiler
-dnl
 
 dnl prevent libtool setting LTCFLAGS to default of -g -O2 when CFLAGS unset.
 dnl libtool must be deleted with make distclean to see this fix.
 if test x"$CFLAGS" = x""; then
-    AC_SUBST(CFLAGS, [ ])
+  AC_SUBST(CFLAGS, [ ])
 fi
 
+dnl
+dnl Tools
+dnl
 AC_PROG_CC
+AC_PROG_LD
+AC_PROG_INSTALL
 AC_PROG_LIBTOOL
-PKG_PROG_PKG_CONFIG([0.17.2])
 
+AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, yes, no)
+if test x"$HAVE_PKGCONFIG" = x"no"; then
+  AC_MSG_ERROR([pkg-config is required!])
+fi
+PKG_PROG_PKG_CONFIG([0.17.2])
 
 AC_CONFIG_FILES(
-       Makefile
-       doc/Makefile
-       src/Makefile
-       src/build.h
-       )
+  Makefile
+  doc/Makefile
+  src/Makefile
+  src/build.h
+  )
 
 uname=`uname`
 
@@ -87,40 +93,29 @@ dnl OWN_WINDOW option
 dnl
 
 AC_ARG_ENABLE([own_window],
-    AC_HELP_STRING([--enable-own-window], [enable if you want support for creating own window @<:@default=yes@:>@]),
-    [dah="$enableval"], [dah=yes])
+              AC_HELP_STRING([--disable-own-window], 
+                             [disable if you do not want support for creating own window @<:@default=yes@:>@]),
+              [dah="$enableval"], [dah=yes])
 
 if test $dah != "no"; then
   AC_DEFINE(OWN_WINDOW, 1, [Define if you want support for window creating])
 fi
 
-dnl
-dnl PROC_UPTIME option
-dnl
-
-AC_ARG_ENABLE([proc_uptime],
-    AC_HELP_STRING([--enable-proc-uptime], [enable using /proc/uptime for uptime @<:@default=yes@:>@]),
-    [dah="$enableval"], [dah=yes])
-
-if test $dah = "yes"; then
-  AC_DEFINE(PROC_UPTIME, 1, [Define if you want to use /proc/uptime for uptime])
-fi
-
 
 dnl
 dnl Audacious Media Player
 dnl
 
 AC_ARG_ENABLE([audacious],
-    AC_HELP_STRING([--enable-audacious], [enable audacious player support @<:@default=no@:>@]),
-    [want_audacious="$enableval"], [want_audacious=no])
+              AC_HELP_STRING([--enable-audacious], [enable audacious player support @<:@default=no@:>@]),
+              [want_audacious="$enableval"], [want_audacious=no])
 
 AM_CONDITIONAL(BUILD_AUDACIOUS, test x$want_audacious = xyes)
 if test x$want_audacious = xyes; then
-       PKG_CHECK_MODULES([AUDACIOUS], [audacious >= 0.1])
-       CFLAGS="$CFLAGS $AUDACIOUS_CFLAGS"
-       LIBS="$LIBS $AUDACIOUS_LIBS"
-       AC_DEFINE(AUDACIOUS, 1, [Define for Audacious support])
+  PKG_CHECK_MODULES([AUDACIOUS], [audacious >= 0.1])
+      CFLAGS="$CFLAGS $AUDACIOUS_CFLAGS"
+      LIBS="$LIBS $AUDACIOUS_LIBS"
+      AC_DEFINE(AUDACIOUS, 1, [Define for Audacious support])
 fi
 
 
@@ -129,15 +124,15 @@ dnl BMPx
 dnl
 
 AC_ARG_ENABLE([bmpx],
-    AC_HELP_STRING([--enable-bmpx], [enable if you want BMPx support @<:@default=no@:>@]),
-    [want_bmpx="$enableval"], [want_bmpx=no])
+              AC_HELP_STRING([--enable-bmpx], [enable if you want BMPx support @<:@default=no@:>@]),
+              [want_bmpx="$enableval"], [want_bmpx=no])
 
 AM_CONDITIONAL(BUILD_BMPX, test x$want_bmpx = xyes)
 if test x$want_bmpx = xyes; then
-       PKG_CHECK_MODULES([BMPX], [bmp-2.0 >= 0.14.0])
-       CFLAGS="$CFLAGS $BMPX_CFLAGS"
-       LIBS="$LIBS $BMPX_LIBS"
-       AC_DEFINE(BMPX, 1, [Define if you want BMPx support])
+  PKG_CHECK_MODULES([BMPX], [bmp-2.0 >= 0.14.0])
+  CFLAGS="$CFLAGS $BMPX_CFLAGS"
+  LIBS="$LIBS $BMPX_LIBS"
+  AC_DEFINE(BMPX, 1, [Define if you want BMPx support])
 fi
 
 
@@ -146,8 +141,9 @@ dnl Hddtemp
 dnl
 
 AC_ARG_ENABLE([hddtemp],
-    AC_HELP_STRING([--enable-hddtemp], [enable if you want hddtemp support @<:@default=yes@:>@]),
-    [want_hddtemp="$enableval"], [want_hddtemp=yes])
+              AC_HELP_STRING([--disable-hddtemp], 
+                             [disable if you do not want hddtemp support @<:@default=yes@:>@]),
+              [want_hddtemp="$enableval"], [want_hddtemp=yes])
 
 AM_CONDITIONAL(BUILD_HDDTEMP, test x$want_hddtemp = xyes)
 if test x$want_hddtemp = xyes; then
@@ -159,8 +155,8 @@ dnl MPD
 dnl
 
 AC_ARG_ENABLE([mpd],
-    AC_HELP_STRING([--enable-mpd], [enable if you want MPD support @<:@default=yes@:>@]),
-    [want_mpd="$enableval"], [want_mpd=yes])
+              AC_HELP_STRING([--disable-mpd], [disable if you do not want MPD support @<:@default=yes@:>@]),
+              [want_mpd="$enableval"], [want_mpd=yes])
 
 AM_CONDITIONAL(BUILD_MPD, test x$want_mpd = xyes)
 if test x$want_mpd = xyes; then
@@ -172,15 +168,15 @@ dnl XMMS2
 dnl
 
 AC_ARG_ENABLE([xmms2],
-    AC_HELP_STRING([--enable-xmms2], [enable if you want XMMS2 support @<:@default=no@:>@]),
-    [want_xmms2="$enableval"], [want_xmms2=no])
+              AC_HELP_STRING([--enable-xmms2], [enable if you want XMMS2 support @<:@default=no@:>@]),
+              [want_xmms2="$enableval"], [want_xmms2=no])
 
 AM_CONDITIONAL(BUILD_XMMS2, test x$want_xmms2 = xyes)
 if test x$want_xmms2 = xyes; then
-       PKG_CHECK_MODULES([XMMS2], [xmms2-client])
-       CFLAGS="$CFLAGS $XMMS2_CFLAGS"
-       LIBS="$LIBS $XMMS2_LIBS"
-       AC_DEFINE(XMMS2, 1, [Define if you want XMMS2 support])
+  PKG_CHECK_MODULES([XMMS2], [xmms2-client])
+    CFLAGS="$CFLAGS $XMMS2_CFLAGS"
+    LIBS="$LIBS $XMMS2_LIBS"
+    AC_DEFINE(XMMS2, 1, [Define if you want XMMS2 support])
 fi
 
 
@@ -195,36 +191,62 @@ dnl    [want_imlib2="$enableval"], [want_imlib2=no])
 dnl
 dnl AM_CONDITIONAL(BUILD_IMLIB2, test x$want_imlib2 = xyes)
 dnl if test x$want_imlib2 = xyes; then
-dnl    PKG_CHECK_MODULES([Imlib2], [imlib2])
-dnl    CFLAGS="$CFLAGS $Imlib2_CFLAGS"
-dnl    LIBS="$LIBS $Imlib2_LIBS"
-dnl    AC_DEFINE(IMLIB2, 1, [Define if you want Imlib2 support])
+dnl PKG_CHECK_MODULES([Imlib2], [imlib2])
+dnl CFLAGS="$CFLAGS $Imlib2_CFLAGS"
+dnl LIBS="$LIBS $Imlib2_LIBS"
+dnl AC_DEFINE(IMLIB2, 1, [Define if you want Imlib2 support])
 dnl fi
 
+
 dnl
 dnl PORT_MONITORS
 dnl
 
 AC_ARG_ENABLE([portmon],
-    AC_HELP_STRING([--enable-portmon], [enable if you want tcp (ip4) port monitoring @<:@default=yes@:>@]),
-    [want_portmon="$enableval"], [want_portmon=yes])
+              AC_HELP_STRING([--disable-portmon], 
+                             [disable if you do not want tcp (ip4) port monitoring @<:@default=yes@:>@]),
+              [want_portmon="$enableval"], [want_portmon=yes])
 
 AM_CONDITIONAL(BUILD_PORT_MONITORS, test x$want_portmon = xyes)
 if test x$want_portmon = xyes; then
-       if test "x$uname" != xLinux; then
-           AC_MSG_NOTICE([port monitors not supported on $uname... disabling])
-           want_portmon=no
-       else
-           AC_CHECK_HEADERS([netdb.h netinet/in.h netinet/tcp.h sys/socket.h arpa/inet.h], [], 
-                            [PORT_MONITORS_MISSING=yes])
-           if test "x$PORT_MONITORS_MISSING" = xyes; then
-               AC_MSG_ERROR([missing a needed network header for port monitoring])
-           fi
-           PKG_CHECK_MODULES([GLIB], [glib-2.0])
-           CFLAGS="$CFLAGS $GLIB_CFLAGS"
-           LIBS="$LIBS $GLIB_LIBS"
-           AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
-       fi
+  if test "x$uname" != xLinux; then
+      AC_MSG_NOTICE([port monitors not supported on $uname... disabling])
+      want_portmon=no
+  else
+        AC_CHECK_HEADERS([netdb.h netinet/in.h netinet/tcp.h sys/socket.h arpa/inet.h], [], 
+           [PORT_MONITORS_MISSING=yes])
+        if test "x$PORT_MONITORS_MISSING" = xyes; then
+              AC_MSG_ERROR([missing a needed network header for port monitoring])
+        fi
+      PKG_CHECK_MODULES([GLIB], [glib-2.0])
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$LIBS $GLIB_LIBS"
+        AC_DEFINE(TCP_PORT_MONITOR, 1, [Define if you want tcp port monitoring support])
+  fi
+fi
+
+
+dnl
+dnl Network-based monitoring
+dnl
+
+AC_ARG_ENABLE([network],
+              AC_HELP_STRING([--disable-network], 
+                             [disable if you do not want distributed monitoring @<:@default=yes@:>@]),
+              [want_network="$enableval"], [want_network=yes])
+if test x"$want_network" = x"yes"; then
+  PKG_CHECK_MODULES([LIBDEXTER], [dexter], [], [AC_MSG_RESULT([no]); want_network=no])
+  if test x"$want_network" = x"yes"; then
+    dnl need GNU string stream extensions
+    AC_CHECK_FUNCS([fmemopen open_memstream flockfile funlockfile putc_unlocked], [], [want_network=no])
+    if test x"$want_network" = x"yes"; then
+      CFLAGS="$CFLAGS $LIBDEXTER_CFLAGS"
+      LIBS="$LIBS $LIBDEXTER_LIBS"
+      AC_DEFINE([HAVE_LIBDEXTER], 1, [Define if using Libdexter])
+      dnl _GNU_SOURCE needed for fmemopen, open_memstream
+      AC_DEFINE([_GNU_SOURCE], [], [Define for GNU source and extensions])
+    fi
+  fi
 fi
 
 
@@ -234,9 +256,9 @@ dnl
 
 AM_ICONV
 if test "$am_cv_func_iconv" != yes; then
-       AC_MSG_WARN([Could not find libiconv])
+  AC_MSG_WARN([Could not find libiconv])
 else
-       LIBS="$LIBS $LIBICONV"
+  LIBS="$LIBS $LIBICONV"
 fi
 
 dnl
@@ -244,11 +266,12 @@ dnl debug
 dnl
 
 AC_ARG_ENABLE([debug], 
-    AC_HELP_STRING([--enable-debug], [compile with debug symbols @<:@default=no@:>@]),
-    [want_debug="$enableval"], [want_debug=no])
+              AC_HELP_STRING([--enable-debug], [compile with debug symbols @<:@default=no@:>@]),
+              [want_debug="$enableval"], [want_debug=no])
 
 if test "x$want_debug" = "xyes" -a $ac_cv_c_compiler_gnu != no; then
-       CFLAGS="$CFLAGS -g3"
+  CFLAGS="$CFLAGS -g3"
+  AC_DEFINE([DEBUG], [], [Define for debugging])
 fi
 
 dnl
@@ -256,53 +279,56 @@ dnl X11
 dnl
 
 AC_ARG_ENABLE([x11],
-    AC_HELP_STRING([--enable-x11], [enable if you want X11 support @<:@default=yes@:>@]),
-    [want_x11="$enableval"], [want_x11=yes])
+              AC_HELP_STRING([--disable-x11], [disable if you do not want X11 support @<:@default=yes@:>@]),
+              [want_x11="$enableval"], [want_x11=yes])
 
 AM_CONDITIONAL(BUILD_X11, test x$want_x11 = xyes)
 if test "x$want_x11" = "xyes"; then
     if $PKG_CONFIG --exists x11; then
-       PKG_CHECK_MODULES([X11], [x11])
-       CFLAGS="$CFLAGS $X11_CFLAGS"
-       LIBS="$LIBS $X11_LIBS"
+      PKG_CHECK_MODULES([X11], [x11])
+      CFLAGS="$CFLAGS $X11_CFLAGS"
+      LIBS="$LIBS $X11_LIBS"
     else
-       dnl non-modular X11 installations
-       AC_PATH_X
-       AC_PATH_XTRA
-       CFLAGS="$CFLAGS $X_CFLAGS"
-       LIBS="$LIBS $X_LIBS"
-       LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
-       if test "x$no_x" = "xyes"; then
-           AC_MSG_ERROR([Can't locate your X11 installation])
-       fi
-       AC_CHECK_LIB([X11], [XOpenDisplay], [], AC_MSG_ERROR([Could not find XOpenDisplay in -lX11]))
+      dnl non-modular X11 installations
+      AC_PATH_X
+      AC_PATH_XTRA
+      CFLAGS="$CFLAGS $X_CFLAGS"
+      LIBS="$LIBS $X_LIBS"
+      LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
+      if test "x$no_x" = "xyes"; then
+        AC_MSG_ERROR([Can't locate your X11 installation])
+      fi
+      AC_CHECK_LIB([X11], [XOpenDisplay], [], AC_MSG_ERROR([Could not find XOpenDisplay in -lX11]))
     fi
     AC_DEFINE(X11, 1, [Define if you want to use X11])
 fi
-       
+  
 
 dnl
 dnl Xext Double-buffering Extension
 dnl
 
 AC_ARG_ENABLE([double_buffer],
-    AC_HELP_STRING([--enable-double-buffer], [enable for flicker-free operation @<:@default=yes@:>@]),
-    [want_double_buffer="$enableval"], [want_double_buffer=yes])
+              AC_HELP_STRING([--disable-double-buffer], 
+                             [disable for no Xdbe double-buffering support @<:@default=yes@:>@]),
+              [want_double_buffer="$enableval"], [want_double_buffer=yes])
 
 if test "x$want_double_buffer" = "xyes"; then
     if test "x$want_x11" != "xyes"; then
-           AC_MSG_ERROR([--enable-x11 is required for double-buffering])
-    fi
-    if $PKG_CONFIG --exists xext; then
-       PKG_CHECK_MODULES([XEXT],[xext])
-       CFLAGS="$CFLAGS $XEXT_CFLAGS"
-       LIBS="$LIBS $XEXT_LIBS"
-    else
-       dnl non-modular X11 installation
-       AC_CHECK_LIB([Xext], [XdbeQueryExtension], [LIBS="$LIBS -lXext"], 
-                    AC_MSG_ERROR([Could not find XdbeQueryExtension in -lXext]))
+      dnl silently disable if no x11
+      want_double_buffer=no
+    else 
+      if $PKG_CONFIG --exists xext; then
+        PKG_CHECK_MODULES([XEXT],[xext])
+        CFLAGS="$CFLAGS $XEXT_CFLAGS"
+        LIBS="$LIBS $XEXT_LIBS"
+      else
+        dnl non-modular X11 installation
+        AC_CHECK_LIB([Xext], [XdbeQueryExtension], [LIBS="$LIBS -lXext"], 
+                    AC_MSG_ERROR([Could not find XdbeQueryExtension in -lXext]))
+      fi
+      AC_DEFINE(HAVE_XDBE, 1, [Define for X11 double-buffering])
     fi
-    AC_DEFINE(HAVE_XDBE, 1, [Define for X11 double-buffering])
 fi
 
 
@@ -311,23 +337,26 @@ dnl Xdamage Extension
 dnl
 
 AC_ARG_ENABLE([xdamage],
-    AC_HELP_STRING([--enable-xdamage], [enable if you want Xdamage support @<:@default=yes@:>@]),
-    [want_xdamage="$enableval"], [want_xdamage=yes])
+              AC_HELP_STRING([--disable-xdamage], 
+                             [disable if you do not want Xdamage support @<:@default=yes@:>@]),
+              [want_xdamage="$enableval"], [want_xdamage=yes])
 
 if test "x$want_xdamage" = "xyes"; then
     if test "x$want_x11" != "xyes"; then
-           AC_MSG_ERROR([--enable-x11 is required for xdamage])
+      dnl silently disable if no x11
+      want_xdamage=no
+    else 
+      if $PKG_CONFIG --exists xdamage; then
+        PKG_CHECK_MODULES([XDAMAGE],[xdamage])
+        CFLAGS="$CFLAGS $XDAMAGE_CFLAGS"
+        LIBS="$LIBS $XDAMAGE_LIBS"
+      else
+        dnl non-modular X11 installation
+        AC_CHECK_LIB([Xdamage], [XDamageQueryExtension], [LIBS="$LIBS -lXdamage"],
+                     AC_MSG_ERROR([Could not find XDamageQueryExtension in -lXdamage]))
+      fi
+      AC_DEFINE(HAVE_XDAMAGE, 1, [Define for X11 Xdamage extension])
     fi
-    if $PKG_CONFIG --exists xdamage; then
-       PKG_CHECK_MODULES([XDAMAGE],[xdamage])
-       CFLAGS="$CFLAGS $XDAMAGE_CFLAGS"
-       LIBS="$LIBS $XDAMAGE_LIBS"
-    else
-       dnl non-modular X11 installation
-       AC_CHECK_LIB([Xdamage], [XDamageQueryExtension], [LIBS="$LIBS -lXdamage"],
-                    AC_MSG_ERROR([Could not find XDamageQueryExtension in -lXdamage]))
-    fi
-    AC_DEFINE(HAVE_XDAMAGE, 1, [Define for X11 Xdamage extension])
 fi
 
 
@@ -336,17 +365,19 @@ dnl Xft
 dnl
 
 AC_ARG_ENABLE([xft],
-    AC_HELP_STRING([--enable-xft], [enable if you want to use Xft @<:@default=yes@:>@]),
-    [want_xft="$enableval"], [want_xft=yes])
+              AC_HELP_STRING([--disable-xft], [disable if you do not want to use Xft @<:@default=yes@:>@]),
+              [want_xft="$enableval"], [want_xft=yes])
 
 if test x$want_xft = "xyes"; then
     if test "x$want_x11" != "xyes"; then
-           AC_MSG_ERROR([--enable-x11 is required for xft])
+      dnl silently disable if no x11
+      want_xft=no
+    else 
+      PKG_CHECK_MODULES(XFT, [xft])
+      CFLAGS="$CFLAGS $XFT_CFLAGS"
+      LIBS="$LIBS $XFT_LIBS"
+      AC_DEFINE(XFT, 1, [Define for Xft support])
     fi
-    PKG_CHECK_MODULES(XFT, [xft])
-    CFLAGS="$CFLAGS $XFT_CFLAGS"
-    LIBS="$LIBS $XFT_LIBS"
-    AC_DEFINE(XFT, 1, [Define for Xft support])
 fi
 
 
@@ -356,8 +387,8 @@ dnl
 
 if test x$WANT_KVM = xyes; then
   AC_CHECK_LIB(kvm, kvm_open,
-       LIBS="$LIBS -lkvm",
-       AC_MSG_ERROR([Could not find kvm_open in -lkvm.])
+    LIBS="$LIBS -lkvm",
+  AC_MSG_ERROR([Could not find kvm_open in -lkvm.])
   )
 fi
 
@@ -366,10 +397,10 @@ dnl devstat
 dnl
 
 if test x$WANT_DEVSTAT = xyes; then
-       AC_CHECK_LIB(devstat, devstat_getversion,
-                    LIBS="$LIBS -ldevstat",
-                    AC_MSG_ERROR([Cound not find devstat_getversion in -ldevstat.])
-       )
+  AC_CHECK_LIB(devstat, devstat_getversion,
+         LIBS="$LIBS -ldevstat",
+         AC_MSG_ERROR([Cound not find devstat_getversion in -ldevstat.])
+  )
 fi
 
 dnl
@@ -378,8 +409,8 @@ dnl
 
 if test x$WANT_OSSLIB = xyes; then
     AC_CHECK_LIB(ossaudio, _oss_ioctl,
-       LIBS="$LIBS -lossaudio",
-       AC_MSG_ERROR([Could not find oss_ioctl in -lossaudio.])
+  LIBS="$LIBS -lossaudio",
+  AC_MSG_ERROR([Could not find oss_ioctl in -lossaudio.])
     )
 fi
 
@@ -388,17 +419,17 @@ dnl Some headers
 dnl
 
 AC_CHECK_HEADERS([signal.h unistd.h sys/utsname.h sys/stat.h linux/soundcard.h dirent.h mcheck.h \
-                 sys/statfs.h sys/param.h pthread.h assert.h errno.h time.h])
+      sys/statfs.h sys/param.h pthread.h assert.h errno.h time.h])
 AC_CHECK_HEADERS([sys/mount.h], [], [],
-                [#ifdef HAVE_SYS_PARAM_H
-                 #include <sys/param.h>
-                 #endif
-                 ])
+     [#ifdef HAVE_SYS_PARAM_H
+      #include <sys/param.h>
+      #endif
+      ])
 dnl
 dnl Some functions
 dnl
 
-AC_CHECK_FUNCS([calloc malloc free popen])
+AC_CHECK_FUNCS([calloc malloc free popen sysinfo getloadavg])
 AC_SEARCH_LIBS(clock_gettime, [rt], [], AC_MSG_ERROR([clock_gettime() not found]))
 
 
@@ -410,29 +441,11 @@ AC_CHECK_PROGS(db2x_xsltproc_cmd, db2x_xsltproc)
 AC_CHECK_PROGS(db2x_manxml_cmd, db2x_manxml)
 AC_CHECK_PROGS(xsltproc_cmd, xsltproc)
 if test x$db2x_xsltproc_cmd = "x" -o x$xsltproc_cmd = "x"; then
-       AM_CONDITIONAL(HAVE_DOCSTUFF, false)
+  AM_CONDITIONAL(HAVE_DOCSTUFF, false)
 else
-       AM_CONDITIONAL(HAVE_DOCSTUFF, true)
+  AM_CONDITIONAL(HAVE_DOCSTUFF, true)
 fi
 
-dnl
-dnl Check sysinfo()
-dnl
-
-if test x$WANT_SYSINFO = xyes; then
-  dah=no
-  AC_MSG_CHECKING(for sysinfo)
-  AC_TRY_COMPILE(
-    [#include <sys/types.h>
-     #include <sys/sysinfo.h>],
-    [struct sysinfo s; sysinfo(&s); (void) s.uptime; ],
-    [AC_MSG_RESULT(yes); dah=yes],
-    [AC_MSG_RESULT(not usable); dah=no])
-
-  if test x$dah = xyes; then
-    AC_DEFINE(HAVE_SYSINFO, 1, [Define if you have sysinfo (Linux)])
-  fi
-fi
 
 dnl
 dnl kstat in Solaris
@@ -462,17 +475,20 @@ AC_DEFUN([AM_LANGINFO_CODESET],
   fi
 ])
 
-dnl
-dnl Check getloadavg
-dnl
 
-AC_MSG_CHECKING(for getloadavg)
-AC_TRY_COMPILE(
-  [#include <stdlib.h>],
-  [double v[3]; getloadavg(v, 3);],
-  [AC_MSG_RESULT(yes)
-   AC_DEFINE(HAVE_GETLOADAVG, 1, [Define if you have getloadavg])],
-  [AC_MSG_RESULT(no)])
+dnl ************************
+dnl * Linker optimizations *
+dnl ************************
+AC_MSG_CHECKING([if $LD accepts -O1])
+case `$LD -O1 -v 2>&1 </dev/null` in
+*GNU* | *BSD*)
+  LDFLAGS="$LDFLAGS -Wl,-O1"
+  AC_MSG_RESULT([yes])
+  ;;
+*)
+  AC_MSG_RESULT([no])
+  ;;
+esac
 
 
 dnl
@@ -493,25 +509,25 @@ cat << EOF
 
 $PACKAGE $VERSION configured successfully:
 
- Installing into:      $prefix
- C compiler flags:     $CFLAGS
- Linker flags:         $LDFLAGS
- Libraries:            $LIBS
+ Installing into:   $prefix
+ C compiler flags:  $CFLAGS
+ Linker flags:      $LDFLAGS
+ Libraries:         $LIBS
 
  * x11:
-  x11 support:         $want_x11
-  xdamage support:     $want_xdamage
-  xdbe support:                $want_double_buffer
-  xft support:          $want_xft
+  x11 support:      $want_x11
+  xdamage support:  $want_xdamage
+  xdbe support:     $want_double_buffer
+  xft support:      $want_xft
 
  * music detection:
-  audacious:           $want_audacious
-  bmpx:                        $want_bmpx
-  mpd:                 $want_mpd
-  xmms2:                $want_xmms2
+  audacious:        $want_audacious
+  bmpx:             $want_bmpx
+  mpd:              $want_mpd
+  xmms2:            $want_xmms2
 
  * general:
-  hddtemp:              $want_hddtemp
-  portmon:             $want_portmon  
-
+  hddtemp:          $want_hddtemp
+  portmon:          $want_portmon  
+  network:          $want_network
 EOF
index 2e292f6..f70a903 100644 (file)
 </varlistentry>
 
 <varlistentry>
+       <term><command><option>dexter_client</option></command></term>
+       <listitem>
+               Act as client and connect to libdexter server for remote monitoring?
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term><command><option>dexter_config</option></command></term>
+       <listitem>
+               Full path to libdexter configuration file (default search order: $HOME/.dexterrc; /etc/libdexter/dexter.conf)
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term><command><option>dexter_server</option></command></term>
+       <listitem>
+               Act as server for libdexter services?
+       <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
        <term><command><option>double_buffer</option></command></term>
        <listitem>
                Use the Xdbe extension? (eliminates flicker) It is highly recommended to use own window with this one so double buffer won't be so big.
 </varlistentry>
 
 <varlistentry>
-       <term><command><option>own_window_transparent</option></command></term>
-       <listitem>
-               Boolean, set pseudo-transparency?
-               <para></para></listitem>
-</varlistentry>
-
-<varlistentry>
-       <term><command><option>own_window_type</option></command></term>
-       <listitem>
-               if own_window is yes, you may specify type normal, desktop or override (default: normal).
-               Desktop windows are special windows that have no window decorations; are always visible 
-               on your desktop; do not appear in your pager or taskbar; and are sticky across all workspaces.
-               Override windows are not under the control of the window manager.  Hints are ignored. This type
-               of window can be useful for certain situations.
-               <para></para></listitem>
+        <term><command><option>own_window_class</option></command></term>
+        <listitem>
+                Manually set the WM_CLASS name.  Defaults to "Conky".
+        <para></para></listitem>
 </varlistentry>
 
 <varlistentry>
 </varlistentry>
 
 <varlistentry>
+        <term><command><option>own_window_title</option></command></term>
+        <listitem>
+                Manually set the window name.  Defaults to "&lt;hostname&gt; - conky".
+        <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term><command><option>own_window_transparent</option></command></term>
+       <listitem>
+               Boolean, set pseudo-transparency?
+               <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
+       <term><command><option>own_window_type</option></command></term>
+       <listitem>
+               if own_window is yes, you may specify type normal, desktop or override (default: normal).
+               Desktop windows are special windows that have no window decorations; are always visible 
+               on your desktop; do not appear in your pager or taskbar; and are sticky across all workspaces.
+               Override windows are not under the control of the window manager.  Hints are ignored. This type
+               of window can be useful for certain situations.
+               <para></para></listitem>
+</varlistentry>
+
+<varlistentry>
        <term><command><option>out_to_console</option></command>
        </term>
        <listitem>
 </varlistentry>
 
 <varlistentry>
-       <term><command><option>wm_class_name</option></command></term>
-       <listitem>
-               Manually set the WM_CLASS name.  Defaults to "conky".
-       <para></para></listitem>
-</varlistentry>
-
-<varlistentry>
        <term><command><option>xftalpha</option></command></term>
        <listitem>
                Alpha of Xft font.  Must be a value at or between 1 and 0.
index bc84018..69631ce 100644 (file)
@@ -44,7 +44,7 @@ Example to compile and run Conky with all optional components (note that some co
 .TP 
 \fB\*(T<\fBsh autogen.sh\fR\*(T>\fR \*(T<\fB# Only required if building from Svn\fR\*(T> 
 .TP 
-\fB\*(T<\fB\&./configure \fR\*(T>\fR\*(T<\fB\-\-prefix=/usr \-\-mandir=/usr/share/man \-\-infodir=/usr/share/info \-\-datadir=/usr/share \-\-sysconfdir=/etc \-\-localstatedir=/var/lib \-\-enable\-xft \-\-enable\-own\-window \-\-enable\-proc\-uptime \-\-enable\-audacious \-\-enable\-bmpx \-\-enable\-hddtemp \-\-enable\-mpd \-\-enable\-xmms2 \-\-enable\-imlib2 \-\-enable\-portmon \-\-enable\-debug \-\-enable\-double\-buffer \-\-enable\-xdamage \-\-enable\-x11\fR\*(T> 
+\fB\*(T<\fB\&./configure \fR\*(T>\fR\*(T<\fB\-\-prefix=/usr \-\-mandir=/usr/share/man \-\-infodir=/usr/share/info \-\-datadir=/usr/share \-\-sysconfdir=/etc \-\-localstatedir=/var/lib \-\-disable\-own\-window \-\-enable\-audacious \-\-enable\-bmpx \-\-disable\-hddtemp \-\-disable\-mpd \-\-enable\-xmms2 \-\-disable\-portmon \-\-disable\-network \-\-enable\-debug \-\-disable\-x11 \-\-disable\-double\-buffer \-\-disable\-xdamage \-\-disable\-xft\fR\*(T> 
 .TP 
 \fB\*(T<\fBmake\fR\*(T>\fR 
 .TP 
@@ -168,6 +168,18 @@ Default outline color
 Default shading color and border's shading color
 
 .TP 
+\fB\*(T<\fBdexter_client\fR\*(T>\fR
+Act as client and connect to libdexter server for remote monitoring?
+
+.TP 
+\fB\*(T<\fBdexter_config\fR\*(T>\fR
+Full path to libdexter configuration file (default search order: $HOME/.dexterrc; /etc/libdexter/dexter.conf)
+
+.TP 
+\fB\*(T<\fBdexter_server\fR\*(T>\fR
+Act as server for libdexter services?
+
+.TP 
 \fB\*(T<\fBdouble_buffer\fR\*(T>\fR
 Use the Xdbe extension? (eliminates flicker) It is highly recommended to use own window with this one so double buffer won't be so big.
 
@@ -259,16 +271,8 @@ Force UTF8? requires XFT
 Boolean, create own window to draw?
 
 .TP 
-\fB\*(T<\fBown_window_transparent\fR\*(T>\fR
-Boolean, set pseudo-transparency?
-
-.TP 
-\fB\*(T<\fBown_window_type\fR\*(T>\fR
-if own_window is yes, you may specify type normal, desktop or override (default: normal).
-Desktop windows are special windows that have no window decorations; are always visible 
-on your desktop; do not appear in your pager or taskbar; and are sticky across all workspaces.
-Override windows are not under the control of the window manager. Hints are ignored. This type
-of window can be useful for certain situations.
+\fB\*(T<\fBown_window_class\fR\*(T>\fR
+Manually set the WM_CLASS name. Defaults to "Conky".
 
 .TP 
 \fB\*(T<\fBown_window_colour\fR\*(T>\fR \*(T<\fBcolour\fR\*(T> 
@@ -281,6 +285,22 @@ Notes: Use own_window_type desktop as another way to implement many of these hin
 If you use own_window_type override, window manager hints have no meaning and are ignored.
 
 .TP 
+\fB\*(T<\fBown_window_title\fR\*(T>\fR
+Manually set the window name. Defaults to "<hostname> - conky".
+
+.TP 
+\fB\*(T<\fBown_window_transparent\fR\*(T>\fR
+Boolean, set pseudo-transparency?
+
+.TP 
+\fB\*(T<\fBown_window_type\fR\*(T>\fR
+if own_window is yes, you may specify type normal, desktop or override (default: normal).
+Desktop windows are special windows that have no window decorations; are always visible 
+on your desktop; do not appear in your pager or taskbar; and are sticky across all workspaces.
+Override windows are not under the control of the window manager. Hints are ignored. This type
+of window can be useful for certain situations.
+
+.TP 
 \fB\*(T<\fBout_to_console\fR\*(T>\fR 
 Print text to stdout.
 
@@ -317,10 +337,6 @@ Adds spaces after certain objects to stop them from moving other things around.
 Use Xft (anti-aliased font and stuff)
 
 .TP 
-\fB\*(T<\fBwm_class_name\fR\*(T>\fR
-Manually set the WM_CLASS name. Defaults to "conky".
-
-.TP 
 \fB\*(T<\fBxftalpha\fR\*(T>\fR
 Alpha of Xft font. Must be a value at or between 1 and 0.
 
index 4104fd9..3d4f52d 100644 (file)
@@ -93,6 +93,11 @@ default_color white
 default_shade_color black
 default_outline_color black
 
+dexter_client no
+dexter_server no
+# config file for libdexter (default search path: $HOME/.dexterrc; /etc/libdexter/dexter.conf)
+dexter_config
+
 # Text alignment, other possible values are commented
 #alignment top_left
 #alignment top_right
index 6febdf8..62463ec 100644 (file)
@@ -79,7 +79,7 @@
                        </varlistentry>
                        <varlistentry>
                                <term>
-                                       <command><option>./configure </option></command><option>--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --enable-xft --enable-own-window --enable-proc-uptime --enable-audacious --enable-bmpx --enable-hddtemp --enable-mpd --enable-xmms2 --enable-imlib2 --enable-portmon --enable-debug --enable-double-buffer --enable-xdamage --enable-x11</option>
+                                       <command><option>./configure </option></command><option>--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --disable-own-window --enable-audacious --enable-bmpx --disable-hddtemp --disable-mpd --enable-xmms2 --disable-portmon --disable-network --enable-debug --disable-x11 --disable-double-buffer --disable-xdamage --disable-xft</option>
                                </term>
                        </varlistentry>
                        <varlistentry>
index c10765b..14b2047 100644 (file)
@@ -6,7 +6,7 @@
 syntax "conky" "\.*conkyrc.*$"
 
 ## Configuration items
-color green "\<(alignment|background|border_margin|border_width|cpu_avg_samples|default_color|default_shade_color|default_outline_color|double_buffer|draw_borders|draw_graph_borders|draw_shades|draw_outline|font|gap_x|gap_y|imap|mail_spool|max_port_monitor_connections|max_specials|max_user_text|maximum_width|minimum_size|mpd_host|mpd_port|mpd_password|net_avg_samples|no_buffers|out_to_console|override_utf8_locale|own_window|own_window_transparent|own_window_type|own_window_hints|own_window_colour|pad_percents|pop3|stippled_borders|total_run_times|update_interval|uppercase|use_spacer|use_xft|wm_class_name|xftalpha|xftfont)\>"
+color green "\<(alignment|background|border_margin|border_width|cpu_avg_samples|default_color|default_shade_color|default_outline_color|dexter_client|dexter_config|dexter_server|double_buffer|draw_borders|draw_graph_borders|draw_shades|draw_outline|font|gap_x|gap_y|imap|mail_spool|max_port_monitor_connections|max_specials|max_user_text|maximum_width|minimum_size|mpd_host|mpd_port|mpd_password|net_avg_samples|no_buffers|out_to_console|override_utf8_locale|own_window|own_window_class|own_window_colour|own_window_hints|own_window_title|own_window_transparent|own_window_type|pad_percents|pop3|stippled_borders|total_run_times|update_interval|uppercase|use_spacer|use_xft|xftalpha|xftfont)\>"
 
 ## Variables
 color brightblue "\<(acpiacadapter|acpifan|acpitemp|acpitempf|addr|adt746xcpu|adt746xfan|align|alignr|apm_adapter|apm_battery_life|apm_battery_time|audacious_bar|audacious_bitrate|audacious_channels|audacious_filename|audacious_frequency|audacious_length|audacious_length_seconds|audacious_playlist_length|audacious_playlist_position|audacious_position|audacious_position_seconds|audacious_status|audacious_title|battery|battery_time|bmpx_album|bmpx_artist|bmpx_bitrate|bmpx_title|bmpx_track|bmpx_uri|buffers|cached|color|colour|cpu|cpubar|diskio|downspeed|downspeedf|else|entropy_avail|entropy_bar|entropy_poolsize|exec|execbar|execgraph|execi|execibar|execigraph|font|freq|freq_dyn|freq_dyn_g|freq_g|fs_bar|fs_free|fs_free_perc|fs_size|fs_used|goto|hddtemp|head|hr|i2c|i8k_ac_status|i8k_bios|i8k_buttons_status|i8k_cpu_temp|i8k_cpu_tempf|i8k_left_fan_rpm|i8k_left_fan_status|i8k_right_fan_rpm|i8k_right_fan_status|i8k_serial|i8k_version|if_existing|if_running|if_mounted|kernel|linkstatus|loadavg|machine|mails|mem|membar|memmax|memperc|mpd_album|mpd_artist|mpd_bar|mpd_bitrate|mpd_elapsed|mpd_file|mpd_length|mpd_name|mpd_percent|mpd_smart|mpd_status|mpd_title|mpd_vol|new_mails|nodename|offset|outlinecolor|pre_exec|processes|running_processes|shadecolor|stippled_hr|swap|swapbar|swapmax|swapperc|sysname|tab|tail|tcp_portmon|texeci|time|top|top_mem|totaldown|totalup|tztime|updates|upspeed|upspeedf|upspeedgraph|uptime|uptime_short|voffset|voltage_mv|voltage_v)\>"
index 1130287..1872b24 100644 (file)
@@ -1,9 +1,9 @@
 " Vim syntax file
-" Language:    conkyrc
-" Author:      Ciaran McCreesh <ciaranm@gentoo.org>
-" Version:     20060307
-" Copyright:   Copyright (c) 2005 Ciaran McCreesh
-" Licence:     You may redistribute this under the same terms as Vim itself
+" Language:   conkyrc
+" Author:     Ciaran McCreesh <ciaranm@gentoo.org>
+" Version:    20060307
+" Copyright:  Copyright (c) 2005 Ciaran McCreesh
+" Licence:    You may redistribute this under the same terms as Vim itself
 "
 " $Id$
 
@@ -22,6 +22,9 @@ syn keyword ConkyrcSetting
         \ default_color
         \ default_outline_color
         \ default_shade_color
+        \ dexter_client
+        \ dexter_config
+        \ dexter_server
         \ double_buffer
         \ draw_borders
         \ draw_graph_borders
@@ -30,11 +33,11 @@ syn keyword ConkyrcSetting
         \ font
         \ gap_x
         \ gap_y
-       \ imap
+        \ imap
         \ mail_spool
-       \ max_port_monitor_connections
-       \ max_specials
-       \ max_user_text
+        \ max_port_monitor_connections
+        \ max_specials
+        \ max_user_text
         \ maximum_width
         \ minimum_size
         \ mpd_host
@@ -45,12 +48,14 @@ syn keyword ConkyrcSetting
         \ out_to_console
         \ override_utf8_locale
         \ own_window
+        \ own_window_class
         \ own_window_colour
         \ own_window_hints
+        \ own_window_title
         \ own_window_transparent
-       \ own_window_type
+        \ own_window_type
         \ pad_percents
-       \ pop3
+        \ pop3
         \ stippled_borders
         \ total_run_times
         \ update_interval
@@ -66,11 +71,11 @@ syn keyword ConkyrcConstant
         \ below
         \ bottom_left
         \ bottom_right
-       \ desktop
+        \ desktop
         \ no
         \ none
-       \ normal
-       \ override
+        \ normal
+        \ override
         \ skip_pager
         \ skip_taskbar
         \ sticky
@@ -92,19 +97,19 @@ syn region ConkyrcVar start=/\$\w\@=/ end=/\W\@=\|$/ contained contains=ConkyrcV
 syn match ConkyrcVarStuff /{\@<=/ms=s contained nextgroup=ConkyrcVarName
 
 syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipwhite
-       \ acpiacadapter 
-       \ acpifan 
-       \ acpitemp 
-       \ acpitempf 
-       \ addr 
-       \ adt746xcpu
-       \ adt746xfan 
-       \ alignc 
-       \ alignr 
-       \ apm_adapter 
-       \ apm_battery_life 
-       \ apm_battery_time
-       \ audacious_bar
+        \ acpiacadapter 
+        \ acpifan 
+        \ acpitemp 
+        \ acpitempf 
+        \ addr 
+        \ adt746xcpu
+        \ adt746xfan 
+        \ alignc 
+        \ alignr 
+        \ apm_adapter 
+        \ apm_battery_life 
+        \ apm_battery_time
+        \ audacious_bar
         \ audacious_bitrate
         \ audacious_channels
         \ audacious_filename
@@ -117,117 +122,117 @@ syn keyword ConkyrcVarName contained nextgroup=ConkyrcNumber,ConkyrcColour skipw
         \ audacious_position_seconds
         \ audacious_status
         \ audacious_title
-       \ battery 
-       \ battery_time
-       \ bmpx_album 
-       \ bmpx_artist 
-       \ bmpx_bitrate
-       \ bmpx_title 
-       \ bmpx_track 
-       \ bmpx_uri 
-       \ buffers 
-       \ cached 
-       \ color 
-       \ colour 
-       \ cpu 
-       \ cpubar 
-       \ diskio 
-       \ downspeed 
-       \ downspeedf
-       \ else 
-       \ entropy_avail
-       \ entropy_bar
-       \ entropy_poolsize
-       \ exec 
-       \ execbar 
-       \ execgraph 
-       \ execi 
-       \ execibar 
-       \ execigraph 
-       \ font 
-       \ freq
-       \ freq_dyn 
-       \ freq_dyn_g 
-       \ freq_g 
-       \ fs_bar 
-       \ fs_free 
-       \ fs_free_perc 
-       \ fs_size 
-       \ fs_used 
-       \ goto
-       \ hddtemp
-       \ head
-       \ hr 
-       \ i2c 
-       \ i8k_ac_status 
-       \ i8k_bios 
-       \ i8k_buttons_status 
-       \ i8k_cpu_temp 
-       \ i8k_cpu_tempf
-       \ i8k_left_fan_rpm 
-       \ i8k_left_fan_status 
-       \ i8k_right_fan_rpm 
-       \ i8k_right_fan_status
-       \ i8k_serial 
-       \ i8k_version 
-       \ if_existing 
-       \ if_mounted 
-       \ if_running 
-       \ kernel 
-       \ linkstatus 
-       \ loadavg
-       \ machine 
-       \ mails 
-       \ mem 
-       \ membar 
-       \ memmax 
-       \ memperc 
-       \ mpd_album 
-       \ mpd_artist 
-       \ mpd_bar 
-       \ mpd_bitrate 
-       \ mpd_elapsed
-       \ mpd_file
-       \ mpd_length 
-       \ mpd_name
-       \ mpd_percent 
-       \ mpd_smart
-       \ mpd_status 
-       \ mpd_title
-       \ mpd_vol 
-       \ new_mails 
-       \ nodename 
-       \ offset 
-       \ outlinecolor 
-       \ pre_exec 
-       \ processes
-       \ running_processes 
-       \ shadecolor 
-       \ stippled_hr 
-       \ swap 
-       \ swapbar 
-       \ swapmax 
-       \ swapperc 
-       \ sysname
-       \ tab
-       \ tail 
-       \ tcp_portmon 
-       \ texeci 
-       \ time 
-       \ top 
-       \ top_mem 
-       \ totaldown 
-       \ totalup 
-       \ tztime
-       \ updates 
-       \ upspeed 
-       \ upspeedf
-       \ upspeedgraph 
-       \ uptime 
-       \ uptime_short 
-       \ voffset
-       \ voltage_mv
-       \ voltage_v
+        \ battery 
+        \ battery_time
+        \ bmpx_album 
+        \ bmpx_artist 
+        \ bmpx_bitrate
+        \ bmpx_title 
+        \ bmpx_track 
+        \ bmpx_uri 
+        \ buffers 
+        \ cached 
+        \ color 
+        \ colour 
+        \ cpu 
+        \ cpubar 
+        \ diskio 
+        \ downspeed 
+        \ downspeedf
+        \ else 
+        \ entropy_avail
+        \ entropy_bar
+        \ entropy_poolsize
+        \ exec 
+        \ execbar 
+        \ execgraph 
+        \ execi 
+        \ execibar 
+        \ execigraph 
+        \ font 
+        \ freq
+        \ freq_dyn 
+        \ freq_dyn_g 
+        \ freq_g 
+        \ fs_bar 
+        \ fs_free 
+        \ fs_free_perc 
+        \ fs_size 
+        \ fs_used 
+        \ goto
+        \ hddtemp
+        \ head
+        \ hr 
+        \ i2c 
+        \ i8k_ac_status 
+        \ i8k_bios 
+        \ i8k_buttons_status 
+        \ i8k_cpu_temp 
+        \ i8k_cpu_tempf
+        \ i8k_left_fan_rpm 
+        \ i8k_left_fan_status 
+        \ i8k_right_fan_rpm 
+        \ i8k_right_fan_status
+        \ i8k_serial 
+        \ i8k_version 
+        \ if_existing 
+        \ if_mounted 
+        \ if_running 
+        \ kernel 
+        \ linkstatus 
+        \ loadavg
+        \ machine 
+        \ mails 
+        \ mem 
+        \ membar 
+        \ memmax 
+        \ memperc 
+        \ mpd_album 
+        \ mpd_artist 
+        \ mpd_bar 
+        \ mpd_bitrate 
+        \ mpd_elapsed
+        \ mpd_file
+        \ mpd_length 
+        \ mpd_name
+        \ mpd_percent 
+        \ mpd_smart
+        \ mpd_status 
+        \ mpd_title
+        \ mpd_vol 
+        \ new_mails 
+        \ nodename 
+        \ offset 
+        \ outlinecolor 
+        \ pre_exec 
+        \ processes
+        \ running_processes 
+        \ shadecolor 
+        \ stippled_hr 
+        \ swap 
+        \ swapbar 
+        \ swapmax 
+        \ swapperc 
+        \ sysname
+        \ tab
+        \ tail 
+        \ tcp_portmon 
+        \ texeci 
+        \ time 
+        \ top 
+        \ top_mem 
+        \ totaldown 
+        \ totalup 
+        \ tztime
+        \ updates 
+        \ upspeed 
+        \ upspeedf
+        \ upspeedgraph 
+        \ uptime 
+        \ uptime_short 
+        \ voffset
+        \ voltage_mv
+        \ voltage_v
 
 hi def link ConkyrcComment   Comment
 hi def link ConkyrcSetting   Keyword
index 8020733..9e26dda 100644 (file)
@@ -62,10 +62,6 @@ conky_SOURCES =              \
        $(netbsd)               \
        $(port_monitors)        \
        $(solaris)              \
-       remotec.c               \
-       remotec.h               \
-       remoted.c               \
-       remoted.h               \
        timed_thread.c          \
        timed_thread.h          \
        $(x11)                  \
index 9dd6663..beb5a99 100644 (file)
@@ -41,17 +41,17 @@ static audacious_t audacious_items;
  * ----------------------------------------- */
 void update_audacious(void)
 {
-    /* 
-      The worker thread is updating audacious_items array asynchronously to the main 
-      conky thread.  We merely copy the audacious_items array into the main thread's 
-      info structure when the main thread's update cycle fires. 
-    */
-    if (!info.audacious.p_timed_thread)
-       return;
-
-    timed_thread_lock (info.audacious.p_timed_thread);
-    memcpy(&info.audacious.items,audacious_items,sizeof(audacious_items));
-    timed_thread_unlock (info.audacious.p_timed_thread);
+  /* 
+    The worker thread is updating audacious_items array asynchronously to the main 
+    conky thread.  We merely copy the audacious_items array into the main thread's 
+    info structure when the main thread's update cycle fires. 
+  */
+  if (!info.audacious.p_timed_thread)
+    return;
+
+  timed_thread_lock (info.audacious.p_timed_thread);
+  memcpy(&info.audacious.items,audacious_items,sizeof(audacious_items));
+  timed_thread_unlock (info.audacious.p_timed_thread);
 }
 
 
@@ -62,13 +62,13 @@ void update_audacious(void)
  * ------------------------------------------------------------*/
 int create_audacious_thread(void)
 {
-    if (!info.audacious.p_timed_thread)
-       info.audacious.p_timed_thread = timed_thread_create (audacious_thread_func, NULL, 1000000);
+  if (!info.audacious.p_timed_thread)
+    info.audacious.p_timed_thread = timed_thread_create (audacious_thread_func, NULL, 1000000);
 
-    if (!info.audacious.p_timed_thread)
-       return (-1);
+  if (!info.audacious.p_timed_thread)
+    return (-1);
 
-    return 0;
+  return 0;
 }
 
 /* ------------------------------------------------
@@ -78,13 +78,13 @@ int create_audacious_thread(void)
  * ------------------------------------------------ */
 int destroy_audacious_thread(void)
 {
-    /* Is a worker is thread running? If not, no error. */
-    if (!info.audacious.p_timed_thread)
-        return(0);
+  /* Is a worker is thread running? If not, no error. */
+  if (!info.audacious.p_timed_thread)
+    return(0);
 
-    timed_thread_destroy (info.audacious.p_timed_thread, &info.audacious.p_timed_thread);
+  timed_thread_destroy (info.audacious.p_timed_thread, &info.audacious.p_timed_thread);
 
-    return 0;
+  return 0;
 }
 
 /* ---------------------------------------------------
@@ -92,97 +92,96 @@ int destroy_audacious_thread(void)
  * --------------------------------------------------- */ 
 void *audacious_thread_func(void *pvoid)
 {
-    static audacious_t items;
-    gint session,playpos,frames,length;
-    gint rate,freq,chans;
-    gchar *psong,*pfilename;
-
-    pvoid=(void *)pvoid;  /* avoid warning */
-    session=0;
-    psong=NULL;
-    pfilename=NULL;
-
-    /* Loop until the main thread sets the runnable signal to 0i via timed_thread_destroy. */
-    while (1) {
-
-        if (!xmms_remote_is_running (session)) {
-            memset(&items,0,sizeof(items));
-            strcpy(items[AUDACIOUS_STATUS],"Not running");
-            goto next_iter;
-        }
-
-        /* Player status */
-        if (xmms_remote_is_paused (session))
-            strcpy(items[AUDACIOUS_STATUS],"Paused");
-        else if (xmms_remote_is_playing (session))
-            strcpy(items[AUDACIOUS_STATUS],"Playing");
-        else
-            strcpy(items[AUDACIOUS_STATUS],"Stopped");
-
-        /* Current song title */
-        playpos = xmms_remote_get_playlist_pos (session);
-        psong = xmms_remote_get_playlist_title (session, playpos);
-        if (psong) {
-            strncpy(items[AUDACIOUS_TITLE],psong,sizeof(items[AUDACIOUS_TITLE])-1);
-            g_free (psong);
-            psong=NULL;
-        }
-
-        /* Current song length as MM:SS */
-        frames = xmms_remote_get_playlist_time (session,playpos);
-        length = frames / 1000;
-        snprintf(items[AUDACIOUS_LENGTH],sizeof(items[AUDACIOUS_LENGTH])-1,
-                 "%d:%.2d", length / 60, length % 60);
-
-        /* Current song length in seconds */
-        snprintf(items[AUDACIOUS_LENGTH_SECONDS],sizeof(items[AUDACIOUS_LENGTH_SECONDS])-1,
-                 "%d", length);
-
-        /* Current song position as MM:SS */
-        frames = xmms_remote_get_output_time (session);
-        length = frames / 1000;
-        snprintf(items[AUDACIOUS_POSITION],sizeof(items[AUDACIOUS_POSITION])-1,
-                 "%d:%.2d", length / 60, length % 60);
-
-        /* Current song position in seconds */
-        snprintf(items[AUDACIOUS_POSITION_SECONDS],sizeof(items[AUDACIOUS_POSITION_SECONDS])-1,
-                 "%d", length);
-
-        /* Current song bitrate */
-        xmms_remote_get_info (session, &rate, &freq, &chans);
-        snprintf(items[AUDACIOUS_BITRATE],sizeof(items[AUDACIOUS_BITRATE])-1, "%d", rate);
-
-        /* Current song frequency */
-        snprintf(items[AUDACIOUS_FREQUENCY],sizeof(items[AUDACIOUS_FREQUENCY])-1, "%d", freq);
-
-        /* Current song channels */
-        snprintf(items[AUDACIOUS_CHANNELS],sizeof(items[AUDACIOUS_CHANNELS])-1, "%d", chans);
-
-        /* Current song filename */
-        pfilename = xmms_remote_get_playlist_file (session,playpos);
-        if (pfilename) {
-            strncpy(items[AUDACIOUS_FILENAME],pfilename,sizeof(items[AUDACIOUS_FILENAME])-1);
-            g_free (pfilename);
-            pfilename=NULL;
-        }
-
-        /* Length of the Playlist (number of songs) */
-        length = xmms_remote_get_playlist_length (session);
-        snprintf(items[AUDACIOUS_PLAYLIST_LENGTH],sizeof(items[AUDACIOUS_PLAYLIST_LENGTH])-1, "%d", length);
-
-        /* Playlist position (index of song) */
-        snprintf(items[AUDACIOUS_PLAYLIST_POSITION],sizeof(items[AUDACIOUS_PLAYLIST_POSITION])-1, 
-                "%d", playpos+1);
+  static audacious_t items;
+  gint session,playpos,frames,length;
+  gint rate,freq,chans;
+  gchar *psong,*pfilename;
+
+  pvoid=(void *)pvoid;  /* avoid warning */
+  session=0;
+  psong=NULL;
+  pfilename=NULL;
+
+  /* Loop until the main thread sets the runnable signal to 0i via timed_thread_destroy. */
+  while (1) {
+
+    if (!xmms_remote_is_running (session)) 
+    {
+      memset(&items,0,sizeof(items));
+      strcpy(items[AUDACIOUS_STATUS],"Not running");
+        goto next_iter;
+    }
 
-next_iter:
+    /* Player status */
+    if (xmms_remote_is_paused (session))
+      strcpy(items[AUDACIOUS_STATUS],"Paused");
+    else if (xmms_remote_is_playing (session))
+      strcpy(items[AUDACIOUS_STATUS],"Playing");
+    else
+      strcpy(items[AUDACIOUS_STATUS],"Stopped");
+
+    /* Current song title */
+    playpos = xmms_remote_get_playlist_pos (session);
+    psong = xmms_remote_get_playlist_title (session, playpos);
+    if (psong) 
+    {
+      strncpy(items[AUDACIOUS_TITLE],psong,sizeof(items[AUDACIOUS_TITLE])-1);
+      g_free (psong);
+      psong=NULL;
+    }
+
+    /* Current song length as MM:SS */
+    frames = xmms_remote_get_playlist_time (session,playpos);
+    length = frames / 1000;
+    snprintf(items[AUDACIOUS_LENGTH],sizeof(items[AUDACIOUS_LENGTH])-1, "%d:%.2d", length / 60, length % 60);
+
+    /* Current song length in seconds */
+    snprintf(items[AUDACIOUS_LENGTH_SECONDS],sizeof(items[AUDACIOUS_LENGTH_SECONDS])-1, "%d", length);
+
+    /* Current song position as MM:SS */
+    frames = xmms_remote_get_output_time (session);
+    length = frames / 1000;
+    snprintf(items[AUDACIOUS_POSITION],sizeof(items[AUDACIOUS_POSITION])-1,
+             "%d:%.2d", length / 60, length % 60);
+
+    /* Current song position in seconds */
+    snprintf(items[AUDACIOUS_POSITION_SECONDS],sizeof(items[AUDACIOUS_POSITION_SECONDS])-1, "%d", length);
 
-        /* Deliver the refreshed items array to audacious_items. */
-       timed_thread_lock (info.audacious.p_timed_thread);
-        memcpy(&audacious_items,items,sizeof(items));
-       timed_thread_unlock (info.audacious.p_timed_thread);
+    /* Current song bitrate */
+    xmms_remote_get_info (session, &rate, &freq, &chans);
+    snprintf(items[AUDACIOUS_BITRATE],sizeof(items[AUDACIOUS_BITRATE])-1, "%d", rate);
 
-       if (timed_thread_test (info.audacious.p_timed_thread))
-           timed_thread_exit (info.audacious.p_timed_thread);
+    /* Current song frequency */
+    snprintf(items[AUDACIOUS_FREQUENCY],sizeof(items[AUDACIOUS_FREQUENCY])-1, "%d", freq);
 
+    /* Current song channels */
+    snprintf(items[AUDACIOUS_CHANNELS],sizeof(items[AUDACIOUS_CHANNELS])-1, "%d", chans);
+
+    /* Current song filename */
+    pfilename = xmms_remote_get_playlist_file (session,playpos);
+    if (pfilename) 
+    {
+      strncpy(items[AUDACIOUS_FILENAME],pfilename,sizeof(items[AUDACIOUS_FILENAME])-1);
+      g_free (pfilename);
+      pfilename=NULL;
     }
+
+    /* Length of the Playlist (number of songs) */
+    length = xmms_remote_get_playlist_length (session);
+    snprintf(items[AUDACIOUS_PLAYLIST_LENGTH],sizeof(items[AUDACIOUS_PLAYLIST_LENGTH])-1, "%d", length);
+
+    /* Playlist position (index of song) */
+    snprintf(items[AUDACIOUS_PLAYLIST_POSITION],sizeof(items[AUDACIOUS_PLAYLIST_POSITION])-1, 
+           "%d", playpos+1);
+
+next_iter:
+
+    /* Deliver the refreshed items array to audacious_items. */
+    timed_thread_lock (info.audacious.p_timed_thread);
+    memcpy(&audacious_items,items,sizeof(items));
+    timed_thread_unlock (info.audacious.p_timed_thread);
+
+    if (timed_thread_test (info.audacious.p_timed_thread))
+      timed_thread_exit (info.audacious.p_timed_thread);
+  }
 }
index 6ac265a..a4a6b05 100644 (file)
@@ -7,8 +7,6 @@
  */
 
 #include "conky.h"
-#include "remoted.h"
-#include "remotec.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -30,6 +28,11 @@ double get_time()
        return tv.tv_sec + (tv.tv_usec / 1000000.0);
 }
 
+#if defined(HAVE_LIBDEXTER) && defined(__linux__)
+#define USE_OS_SPECIFIC_OPEN_FILE
+#endif
+
+#ifndef USE_OS_SPECIFIC_OPEN_FILE
 FILE *open_file(const char *file, int *reported)
 {
        FILE *fp = fopen(file, "r");
@@ -44,6 +47,7 @@ FILE *open_file(const char *file, int *reported)
 
        return fp;
 }
+#endif
 
 void variable_substitute(const char *s, char *dest, unsigned int n)
 {
@@ -129,6 +133,11 @@ struct net_stat *get_net_stat(const char *dev)
        return 0;
 }
 
+void clear_net_stats (void)
+{
+  memset (netstats, 0, sizeof(netstats));
+}
+
 void format_seconds(char *buf, unsigned int n, long t)
 {
        if (t >= 24 * 60 * 60)  /* hours necessary when there are days? */
@@ -157,6 +166,7 @@ static double last_meminfo_update;
 static double last_fs_update;
 
 unsigned long long need_mask;
+#define NEED(a) ((need_mask & (1 << a)) && ((info.mask & (1 << a)) == 0))
 
 void update_stuff()
 {
@@ -178,8 +188,6 @@ void update_stuff()
        }
 
        prepare_update();
-       /* client(); this is approximately where the client should be called */
-#define NEED(a) ((need_mask & (1 << a)) && ((info.mask & (1 << a)) == 0))
 
        if (NEED(INFO_UPTIME))
                update_uptime();
@@ -205,8 +213,6 @@ void update_stuff()
        if (NEED(INFO_MAIL))
                update_mail_count();
 
-
-
 #if defined(__linux__)
        if (NEED(INFO_I8K))
                update_i8k();
index 32c2220..33277e1 100644 (file)
@@ -95,6 +95,9 @@ static void print_version()
 #ifdef TCP_PORT_MONITOR
        "  * portmon\n"
 #endif /* TCP_PORT_MONITOR */
+#ifdef HAVE_LIBDEXTER
+  "  * network\n"
+#endif
        "\n");  
 
        exit(0);
@@ -274,9 +277,6 @@ static char *current_config;
 /* set to 1 if you want all text to be in uppercase */
 static unsigned int stuff_in_upper_case;
 
-/* Update interval */
-static double update_interval;
-
 /* Run how many times? */
 static unsigned long total_run_times;
 
@@ -380,6 +380,11 @@ static int pad_percents = 0;
 tcp_port_monitor_args_t        tcp_port_monitor_args;
 #endif
 
+#ifdef HAVE_LIBDEXTER
+/* private config items for libdexter */
+static char *dexter_config = NULL;
+#endif
+
 /* Text that is shown */
 static char original_text[] =
     "$nodename - $sysname $kernel on $machine\n"
@@ -1076,7 +1081,6 @@ enum text_object_type {
 #ifdef TCP_PORT_MONITOR
        OBJ_tcp_portmon,
 #endif
-
 #ifdef HAVE_ICONV
        OBJ_iconv_start,
        OBJ_iconv_stop,
@@ -2006,7 +2010,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
                OBJ(acpitemp, 0) obj->data.i = open_acpi_temperature(arg);
        END OBJ(acpitempf, 0) obj->data.i = open_acpi_temperature(arg);
        END OBJ(acpiacadapter, 0)
-       END OBJ(freq, 0)
+       END OBJ(freq, INFO_FREQ)
            get_cpu_count();
        if (!arg
            || !isdigit(arg[0])
@@ -2022,7 +2026,7 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
            obj->data.cpu_index=atoi(&arg[0]);
        }
        obj->a = 1;
-       END OBJ(freq_g, 0)
+       END OBJ(freq_g, INFO_FREQ)
            get_cpu_count();
        if (!arg
            || !isdigit(arg[0])
@@ -2071,9 +2075,6 @@ static struct text_object *construct_text_object(const char *s, const char *arg,
            obj->data.cpu_index=atoi(&arg[0]);
        }
        obj->a = 1;
-#else 
-       END OBJ(freq, 0);
-       END OBJ(freq_g, 0);
 #endif /* __linux__ */
        END OBJ(freq_dyn, 0);
        END OBJ(freq_dyn_g, 0);
@@ -3428,15 +3429,15 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                                                }
                                        } else {
                                                if (diskio_value > 1024*1024) {
-                                                       snprintf(p, 6, "%.1fGiB   ",
+                                                       snprintf(p, 12, "%.1fGiB   ",
                                                                        (double)diskio_value/1024/1024);
                                                } else if (diskio_value > 1024) {
-                                                       snprintf(p, 6, "%.1fMiB   ",
+                                                       snprintf(p, 12, "%.1fMiB   ",
                                                                        (double)diskio_value/1024);
                                                } else if (diskio_value > 0) {
-                                                       snprintf(p, 6, "%dKiB ", diskio_value);
+                                                       snprintf(p, 12, "%dKiB ", diskio_value);
                                                } else {
-                                                       snprintf(p, 6, "%dB     ", diskio_value);
+                                                       snprintf(p, 12, "%dB     ", diskio_value);
                                                }
                                        }
                                }
@@ -3469,8 +3470,10 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                                                                recv_speed / 1024.0);
                                }
                                OBJ(downspeedgraph) {
-                                       if (obj->data.net->recv_speed == 0)     // this is just to make the ugliness at start go away
+          /*
+                                       if (obj->data.net->recv_speed == 0)     
                                                obj->data.net->recv_speed = 0.01;
+            */
                                        new_graph(p, obj->a, obj->b, obj->c, obj->d,
                                                        (obj->data.net->recv_speed /
                                                         1024.0), obj->e, 1);
@@ -4244,8 +4247,10 @@ static void generate_text_internal(char *p, int p_max_size, struct text_object *
                                                 trans_speed / 1024.0);
                        }
                        OBJ(upspeedgraph) {
-                               if (obj->data.net->trans_speed == 0)    // this is just to make the ugliness at start go away
+        /*
+                               if (obj->data.net->trans_speed == 0)
                                        obj->data.net->trans_speed = 0.01;
+          */
                                new_graph(p, obj->a, obj->b, obj->c, obj->d,
                                          (obj->data.net->trans_speed /
                                1024.0), obj->e, 1);
@@ -5065,7 +5070,6 @@ static void draw_string(const char *s)
                printf("%s\n", s);
                fflush(stdout);   /* output immediately, don't buffer */
        }
-       /* daemon_run(s);  the daemon can be called here, but we need to have a buffer in daemon_run() and we need to tell it when everything is ready to be sent */
        memset(tmpstring1,0,TEXT_BUFFER_SIZE);
        memset(tmpstring2,0,TEXT_BUFFER_SIZE);
        strncpy(tmpstring1, s, TEXT_BUFFER_SIZE-1);
@@ -5881,22 +5885,41 @@ static void main_loop()
 
                        case ButtonPress:
                                if (own_window)
-                               {
+        {
+          /* if an ordinary window with decorations */
+          if ((window.type==TYPE_NORMAL) && (!TEST_HINT(window.hints,HINT_UNDECORATED)))
+          {
+            /* allow conky to hold input focus.*/
+            break;
+          }
+          else
+                                 {
                                    /* forward the click to the desktop window */
                                    XUngrabPointer(display, ev.xbutton.time);
                                    ev.xbutton.window = window.desktop;
                                    XSendEvent(display, ev.xbutton.window, False, ButtonPressMask, &ev);
-                               }
+            XSetInputFocus(display, ev.xbutton.window,RevertToParent,ev.xbutton.time);
+                                 }
+        }
                                break;
 
                        case ButtonRelease:
-                                if (own_window)
-                                {
-                                    /* forward the release to the desktop window */
-                                    ev.xbutton.window = window.desktop;
-                                    XSendEvent(display, ev.xbutton.window, False, ButtonReleaseMask, &ev);
-                                }
-                                break;
+        if (own_window)
+        {
+          /* if an ordinary window with decorations */
+          if ((window.type==TYPE_NORMAL) && (!TEST_HINT(window.hints,HINT_UNDECORATED)))
+          {
+            /* allow conky to hold input focus.*/
+            break;
+          }
+          else
+          {
+            /* forward the release to the desktop window */
+            ev.xbutton.window = window.desktop;
+            XSendEvent(display, ev.xbutton.window, False, ButtonReleaseMask, &ev);
+          }
+        }
+        break;
 
 #endif
 
@@ -6092,6 +6115,12 @@ void clean_up(void)
            free (specials);
            specials=NULL;
        }
+
+#ifdef HAVE_LIBDEXTER
+  dexter_library_exit ();
+  if (dexter_config)
+    free (dexter_config);
+#endif
 }
 
 static int string_to_bool(const char *s)
@@ -6188,7 +6217,9 @@ static void set_default_configurations(void)
        own_window = 0;
        window.type=TYPE_NORMAL;
        window.hints=0;
-       strcpy(window.wm_class_name, "conky");  
+  strcpy(window.class_name, "Conky");  
+  update_uname();
+  sprintf(window.title,"%s - conky",info.uname_s.nodename);
 #endif
        stippled_borders = 0;
        border_margin = 3;
@@ -6522,14 +6553,34 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0)
 #ifdef X11
 #ifdef OWN_WINDOW
                CONF("own_window") {
-                       own_window = string_to_bool(value);
-               }
-               CONF("wm_class_name") {
-                       memset(window.wm_class_name,0,sizeof(window.wm_class_name));
-                       strncpy(window.wm_class_name, value, sizeof(window.wm_class_name)-1);
-               }
+      if (value)
+                         own_window = string_to_bool(value);
+      else
+        CONF_ERR;
+               }
+               CONF("own_window_class") {
+      if (value)
+      {
+                         memset(window.class_name,0,sizeof(window.class_name));
+                         strncpy(window.class_name, value, sizeof(window.class_name)-1);
+      }
+      else 
+        CONF_ERR;
+               }
+    CONF("own_window_title") {
+      if (value)
+      {
+        memset(window.title,0,sizeof(window.title));
+        strncpy(window.title, value, sizeof(window.title)-1);
+      }
+      else
+        CONF_ERR;
+    }
                CONF("own_window_transparent") {
-                       set_transparent = string_to_bool(value);
+      if (value)
+                         set_transparent = string_to_bool(value);
+      else
+        CONF_ERR;
                }
                CONF("own_window_colour") {
                        if (value) {
@@ -6566,6 +6617,8 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0)
                                }
                                while (p_hint!=NULL);
                        }
+      else
+        CONF_ERR;
                }
                CONF("own_window_type") {
                        if (value) {
@@ -6576,8 +6629,10 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0)
                                else if (strncmp(value,"override",8)==0)
                                        window.type = TYPE_OVERRIDE;
                                else
-                                       CONF_ERR;
+                                 CONF_ERR;
                        }
+      else
+        CONF_ERR;
                }
 #endif
                CONF("stippled_borders") {
@@ -6667,6 +6722,29 @@ else if (strcasecmp(name, a) == 0 || strcasecmp(name, b) == 0)
                        /* else tcp_port_monitor_args.max_port_monitor_connections > 0 as per config */
                }
 #endif
+#ifdef HAVE_LIBDEXTER
+    CONF("dexter_client")
+    {
+      if (value)
+        dexter_client = string_to_bool (value);
+      else
+        CONF_ERR;
+    }
+    CONF("dexter_server")
+    {
+      if (value)
+        dexter_server = string_to_bool (value);
+      else 
+        CONF_ERR;
+    }
+    CONF("dexter_config")
+    {
+      if (value)
+        dexter_config = strdup (value);
+      else
+        CONF_ERR;
+    }
+#endif
 
                else
                ERR("%s: %d: no such configuration: '%s'", f, line, name);
@@ -6933,9 +7011,48 @@ int main(int argc, char **argv)
                }
        }
 
-       update_uname();
+#ifdef HAVE_LIBDEXTER
+  memset (&packet_arrival_time, 0, sizeof (struct timespec));
+  dexter_library_init ();
+  if (dexter_client)
+  {
+    /* wait until some data packets arrive, else conky complains
+     * bittery that /proc filesystems cannot be opened and, worse,
+     * will likely segfault when it references unchecked pointers
+     * in get_text_internal() -- those should be cleaned up.
+     */
+    int try;
+    const int max_tries=30;
+    gboolean got_packet;
+    GTimeVal timeval;
+    fprintf (stderr, "Conky: waiting for data packets to arrive ...\n");
+    for (try=0;try<max_tries;try++)
+    {
+      /* pause main thread for 1 sec */
+      g_get_current_time (&timeval);
+      g_time_val_add (&timeval, G_USEC_PER_SEC); 
+      g_mutex_lock (packet_mutex);
+      /* mutex released before sleeping; re-acquired after time elapses */
+      g_cond_timed_wait (packet_cond, packet_mutex, &timeval);
+      got_packet = packet_arrival_time.tv_sec>0;
+      g_mutex_unlock (packet_mutex);
+
+      if (got_packet)
+        break;
+    }
+    if (got_packet)
+    {
+      fprintf(stderr, "Conky: packets arriving ...\n");
+    }
+    else
+    {
+      fprintf(stderr, "Conky: no data packets ...\n");
+      dexter_library_exit ();
+      exit(1);
+    }
+  }
+#endif
 
-       generate_text();
 #ifdef X11
        selected_font = 0;
        update_text_area();     /* to get initial size of the window */
@@ -6944,7 +7061,7 @@ int main(int argc, char **argv)
                (own_window,
                 text_width + border_margin * 2 + 1,
                 text_height + border_margin * 2 + 1,
-                set_transparent, background_colour, info.uname_s.nodename, argv, argc);
+                set_transparent, background_colour, argv, argc);
        
        selected_font = 0;
        update_text_area();     /* to position text/window on screen */
@@ -6988,7 +7105,13 @@ int main(int argc, char **argv)
        timed_thread_register (info.audacious.p_timed_thread, &info.audacious.p_timed_thread);
 #endif
 
-       main_loop();
+  /*
+   * ***************
+   * MAIN CONKY LOOP
+   * ***************
+   *
+   */
+  main_loop();
 
 #if defined(__FreeBSD__)
        kvm_close(kd);
@@ -7004,3 +7127,119 @@ void signal_handler(int sig)
         * and do any signal processing there, NOT here. */
        g_signal_pending=sig;
 }
+
+#ifdef HAVE_LIBDEXTER
+void dexter_library_init (void)
+{
+  /* start libdexter */
+  if (dexter_client || dexter_server)
+  {
+    GError *error = NULL;
+    dexter_init (dexter_config, &error);
+    if (error)
+      CRIT_ERR ("%s", error->message);
+
+    if (dexter_client)
+    {
+      if (!(info.dexter.channel = dexter_channel_new (NULL, NULL, NULL, dexter_channel_events)))
+        CRIT_ERR("unable to create channel to server");
+      dexter_channel_open (info.dexter.channel, &error);
+      if (error)
+        CRIT_ERR ("%s", error->message);
+      dexter_channel_greet (info.dexter.channel, &error);
+      if (error)
+        CRIT_ERR ("%s", error->message);
+      if (dexter_client_init () < 0)
+        CRIT_ERR ("error initializing dexter client");
+
+      packet_mutex = g_mutex_new ();
+      packet_cond = g_cond_new ();
+    }
+
+    if (dexter_server)
+    {
+      if (!(info.dexter.server = dexter_server_new (NULL, NULL, NULL)))
+        CRIT_ERR("unable to create server");
+      dexter_server_start (info.dexter.server, &error);
+      if (error)
+        CRIT_ERR ("%s", error->message);
+    }
+
+  }
+}
+
+void dexter_library_exit (void)
+{
+  /* shutdown libdexter */
+  if (dexter_client || dexter_server)
+  {
+    GError *error = NULL;
+
+    if (dexter_client)
+    {
+      if (dexter_client_exit () < 0)
+        ERR ("error de-initializing dexter client");
+      if (info.dexter.channel)
+      {
+        dexter_channel_part (info.dexter.channel, &error);
+        if (error)
+        {
+          ERR("%s", error->message);
+          g_clear_error (&error);
+        }
+        dexter_channel_close (info.dexter.channel, &error);
+        if (error)
+        {
+          ERR("%s", error->message);
+          g_clear_error (&error);
+        }
+        dexter_channel_free (info.dexter.channel);
+        info.dexter.channel=NULL;
+      }
+
+      if (packet_mutex)
+      {
+        g_mutex_free (packet_mutex);
+        packet_mutex=NULL;
+      }
+      if (packet_cond)
+      {
+        g_cond_free (packet_cond);
+        packet_cond=NULL;
+      }
+    }
+
+    if (dexter_server)
+    {
+      if (info.dexter.server)
+      {
+        dexter_server_stop (info.dexter.server, &error);
+        if (error)
+        {
+          ERR("%s", error->message);
+          g_clear_error (&error);
+        }
+        dexter_server_free (info.dexter.server);
+        info.dexter.server=NULL;
+      }
+    }
+
+    dexter_exit ();
+  }
+}
+
+void dexter_channel_events (DexterChannel *channel, gint event)
+{
+  if (!channel)
+    return;
+
+  /* if server disconnects we get this event.  we also get it normally
+   * following dexter_channel_part(). */
+  if (event == DEXTER_CHANNEL_EVENT_NOCONN)
+  {
+    fprintf (stderr, "Conky: channel to server closed\n");
+    if (dexter_client && (dexter_client_exit () < 0))
+      ERR ("error de-initializing dexter client");
+  }
+}
+#endif
index a0b5d53..9c3693d 100644 (file)
 #include <machine/apm_bios.h>
 #endif /* __FreeBSD__ */
 
+#ifdef HAVE_LIBDEXTER
+#include <dexter.h>
+#endif
+
 #ifdef AUDACIOUS
 #include "audacious.h"
 #endif
@@ -198,6 +202,35 @@ struct entropy_s {
 #define MAX_PORT_MONITOR_CONNECTIONS_DEFAULT 256
 #endif
 
+#ifdef HAVE_LIBDEXTER
+/* main start/stop for libdexter */
+void dexter_library_init (void);
+void dexter_library_exit (void);
+
+/* os-specific init/exit for libdexter client activity */
+int dexter_client_init (void);
+int dexter_client_exit (void);
+
+/* dexter channel events, i.e. we want to know if channel closes */
+void dexter_channel_events (DexterChannel *, gint);
+
+/* info struct for libdexter */
+struct dexter_s {
+  DexterChannel       *channel;
+  DexterServer        *server;
+  DexterServiceBroker *broker;
+};
+
+/* public config items for libdexter */
+int dexter_client;
+int dexter_server;
+
+/* data packet arrival time */
+struct timespec packet_arrival_time;
+GMutex *packet_mutex;
+GCond  *packet_cond;
+#endif
+
 enum {
        INFO_CPU = 0,
        INFO_MAIL = 1,
@@ -246,6 +279,9 @@ enum {
 #include "libmpdclient.h"
 #endif
 
+/* Update interval */
+double update_interval;
+
 volatile int g_signal_pending;
 
 struct information {
@@ -298,7 +334,10 @@ struct information {
        struct process *first_process;
        unsigned long looped;
 #ifdef TCP_PORT_MONITOR
-        tcp_port_monitor_collection_t * p_tcp_port_monitor_collection;
+  tcp_port_monitor_collection_t * p_tcp_port_monitor_collection;
+#endif
+#ifdef HAVE_LIBDEXTER
+  struct dexter_s dexter;
 #endif
        short kflags;  /* kernel settings, see enum KFLAG */
        struct entropy_s entropy;
@@ -375,7 +414,8 @@ struct conky_window {
        int width;
        int height;
 #ifdef OWN_WINDOW
-       char wm_class_name[256];
+       char class_name[256];
+  char title[256];
        int x;
        int y;
        unsigned int type;
@@ -402,8 +442,8 @@ extern int workarea[4];
 extern struct conky_window window;
 
 void init_X11();
-void init_window(int use_own_window, int width, int height, int set_trans, int back_colour, char * nodename,
-                char **argv, int argc);
+void init_window(int use_own_window, int width, int height, int set_trans, int back_colour, 
+                 char **argv, int argc);
 void create_gc();
 void set_transparent_background(Window win);
 long get_x11_color(const char *);
@@ -426,6 +466,7 @@ void variable_substitute(const char *s, char *dest, unsigned int n);
 void format_seconds(char *buf, unsigned int n, long t);
 void format_seconds_short(char *buf, unsigned int n, long t);
 struct net_stat *get_net_stat(const char *dev);
+void clear_net_stats(void);
 
 void update_stuff();
 
index d40f233..f223b57 100644 (file)
@@ -918,3 +918,20 @@ void
 free_all_processes(void)
 {
 }
+
+#ifdef HAVE_LIBDEXTER
+/* return 0 on success, -1 on failure */
+int dexter_client_init (void)
+{
+    /* init libdexter for freebsd-specific client-side activity */
+    return 0;
+}
+
+/* return 0 on success, -1 on failure */
+int dexter_client_exit (void)
+{
+    /* de-init libdexter for freebsd-specific client-side activity */
+    return 0;
+}
+#endif
+
index 83fa5d0..446e4e4 100644 (file)
 #define SHORTSTAT_TEMPL "%*s %llu %llu %llu"
 #define LONGSTAT_TEMPL "%*s %llu %llu %llu "
 
-
-static struct sysinfo s_info;
+#ifdef HAVE_LIBDEXTER
+/* need the procraw service from the libdexter dxt-sysinfo plugin */
+#include <dxt-sysinfo/procraw-public.h>
+#define PROCRAW_SERVICE_UUID "ce975a10-0e52-458a-a4b9-253734760436"
+/* timed sampler that delivers the procraw data */
+static DexterTimedSampler *procraw_sampler = NULL;
+/* procraw structure used as /proc surrogate */
+static DxtSysinfoProcrawData procraw_data;
+/* data selector mask for the service */
+gint procraw_mask;
+#endif
 
 static int show_nice_processes;
 
+/* this flags tells the linux routines to use the /proc system
+ * where possible, even if other api's are available, e.g. sysinfo() 
+ * or getloadavg(). the reason for this is to allow for /proc-based 
+ * distributed monitoring. using a flag in this manner creates less
+ * confusing code.
+ */
+static int prefer_proc = 0;
+
 void prepare_update()
 {
 }
 
-static void update_sysinfo()
-{
-       sysinfo(&s_info);
-
-       info.uptime = (double) s_info.uptime;
-
-       /* there was some problem with these */
-#if 0
-//      info.loadavg[0] = s_info.loads[0] / 100000.0f;
-       info.loadavg[1] = s_info.loads[1] / 100000.0f;
-       info.loadavg[2] = s_info.loads[2] / 100000.0f;
-       gkrelltop_process_find_top_three info.mask |= 1 << INFO_LOADAVG;
-#endif
-
-       info.procs = s_info.procs;
-
-       /* these aren't nice, no cache and should check kernel version for mem_unit */
-#if 0
-       info.memmax = s_info.totalram;
-       info.mem = s_info.totalram - s_info.freeram;
-       info.swapmax = s_info.totalswap;
-       info.swap = s_info.totalswap - s_info.swap;
-       info.mask |= 1 << INFO_MEM;
-#endif
-
-       info.mask |= (1 << INFO_UPTIME) | (1 << INFO_PROCS);
-}
-
 void update_uptime()
 {
-       /* prefers sysinfo() for uptime, I don't really know which one is better
-        * (=faster?) */
-#ifdef USE_PROC_UPTIME
-       static int rep;
-       FILE *fp = open_file("/proc/uptime", &rep);
-       if (!fp)
-               return 0;
-       fscanf(fp, "%lf", &info.uptime);
-       fclose(fp);
-
-       info.mask |= (1 << INFO_UPTIME);
-#else
-       update_sysinfo();
+#ifdef HAVE_SYSINFO
+  if (!prefer_proc)
+  {
+    struct sysinfo s_info;
+    sysinfo(&s_info);
+    info.uptime = (double) s_info.uptime;
+  }
+  else
 #endif
+  {
+         static int rep = 0;
+         FILE *fp;
+  
+    if (!(fp = open_file("/proc/uptime", &rep)))
+    {
+      return;
+    }
+         fscanf(fp, "%lf", &info.uptime);
+         fclose(fp);
+  }
+  info.mask |= (1 << INFO_UPTIME);
 }
 
 /* these things are also in sysinfo except Buffers:, that's why I'm reading
 * them from proc */
 
-static FILE *meminfo_fp;
-
 void update_meminfo()
 {
-       static int rep;
+  FILE *meminfo_fp;
+       static int rep = 0;
        /*  unsigned int a; */
        char buf[256];
 
        info.mem = info.memmax = info.swap = info.swapmax = info.bufmem =
            info.buffers = info.cached = 0;
 
-       if (meminfo_fp == NULL)
-               meminfo_fp = open_file("/proc/meminfo", &rep);
-       else
-               fseek(meminfo_fp, 0, SEEK_SET);
-       if (meminfo_fp == NULL)
-               return;
+  if (!(meminfo_fp = open_file("/proc/meminfo", &rep)))
+      return;
 
        while (!feof(meminfo_fp)) {
                if (fgets(buf, 255, meminfo_fp) == NULL)
@@ -133,21 +124,21 @@ void update_meminfo()
        info.bufmem = info.cached + info.buffers;
 
        info.mask |= (1 << INFO_MEM) | (1 << INFO_BUFFERS);
+
+  fclose (meminfo_fp);
 }
 
-static FILE *net_dev_fp;
 static FILE *net_wireless_fp;
 
 inline void update_net_stats()
 {
-       static int rep;
+  FILE *net_dev_fp;
+       static int rep = 0;
        // FIXME: arbitrary size chosen to keep code simple.
        int i, i2;
        unsigned int curtmp1, curtmp2;
        unsigned int k;
        struct ifconf conf;
-
-
        char buf[256];
        double delta;
 
@@ -157,13 +148,8 @@ inline void update_net_stats()
                return;
 
        /* open file and ignore first two lines */
-       if (net_dev_fp == NULL) {
-               net_dev_fp = open_file("/proc/net/dev", &rep);
-       }
-       else
-               fseek(net_dev_fp, 0, SEEK_SET);
-       if (!net_dev_fp)
-               return;
+  if (!(net_dev_fp = open_file("/proc/net/dev", &rep)))
+    return;
 
        fgets(buf, 255, net_dev_fp);    /* garbage */
        fgets(buf, 255, net_dev_fp);    /* garbage (field names) */
@@ -265,17 +251,17 @@ inline void update_net_stats()
                        }
                }
 
-
-
        }
 
-       /* fclose(net_dev_fp); net_dev_fp = NULL; */
+       fclose(net_dev_fp);
+
+  info.mask |= (1 << INFO_NET);
 }
 
 inline void update_wifi_stats()
 {
        /** wireless stats patch by Bobby Beckmann **/
-       static int rep;
+       static int rep = 0;
        int i;
        char buf[256];
        /*open file and ignore first two lines       sorry, this code sucks ass right now, i'll clean it up later */
@@ -325,7 +311,27 @@ int result;
 
 void update_total_processes()
 {
-       update_sysinfo();
+#ifdef HAVE_SYSINFO
+  if (!prefer_proc)
+  {
+    struct sysinfo s_info;
+    sysinfo(&s_info);
+    info.procs = s_info.procs;
+  }
+  else
+#endif
+  {
+    static int rep = 0;
+    FILE *fp;
+
+    if (!(fp = open_file("/proc/loadavg", &rep)))
+    {
+      return;
+    }
+    fscanf(fp, "%*f %*f %*f %*d/%hd", &info.procs );
+    fclose(fp);
+  }
+  info.mask |= (1 << INFO_PROCS);
 }
 
 #define CPU_SAMPLE_COUNT 15
@@ -345,10 +351,6 @@ struct cpu_info {
        double cpu_val[CPU_SAMPLE_COUNT];
 };
 static short cpu_setup = 0;
-static int rep;
-
-
-static FILE *stat_fp;
 
 /* 
    determine if this kernel gives us "extended" statistics information in /proc/stat. 
@@ -364,16 +366,16 @@ void determine_longstat(char * buf) {
 
 void get_cpu_count()
 {
+  FILE *stat_fp;
+  static int rep = 0;
+
        if (info.cpu_usage) {
                return;
        }
        char buf[256];
-       if (stat_fp == NULL)
-               stat_fp = open_file("/proc/stat", &rep);
-       else
-               fseek(stat_fp, 0, SEEK_SET);
-       if (stat_fp == NULL)
-               return;
+
+  if (!(stat_fp = open_file("/proc/stat", &rep)))
+    return;
 
        info.cpu_count = 0;
 
@@ -389,6 +391,8 @@ void get_cpu_count()
                }
        }
        info.cpu_usage = malloc((info.cpu_count + 1) * sizeof(float));
+
+  fclose (stat_fp);
 }
 
 #define TMPL_LONGSTAT "%*s %llu %llu %llu %llu %llu %llu %llu %llu"
@@ -396,6 +400,8 @@ void get_cpu_count()
 
 inline static void update_stat()
 {
+  FILE *stat_fp;
+  static int rep = 0;
        static struct cpu_info *cpu = NULL;
        char buf[256];
        unsigned int i;
@@ -411,24 +417,19 @@ inline static void update_stat()
                cpu_setup = 1;
        }
 
-       if (stat_template == NULL) {
+       if (!stat_template) {
                stat_template = KFLAG_ISSET(KFLAG_IS_LONGSTAT) ? TMPL_LONGSTAT : TMPL_SHORTSTAT ;
        }       
 
-       if (cpu == NULL) {
-               malloc_cpu_size = (info.cpu_count + 1) *  sizeof(struct cpu_info);
+       if (!cpu) {
+               malloc_cpu_size = (info.cpu_count + 1) * sizeof(struct cpu_info);
                cpu = malloc(malloc_cpu_size);
                memset(cpu, 0, malloc_cpu_size);
        }
 
-       if (stat_fp == NULL) {
-               stat_fp = open_file("/proc/stat", &rep);
-       } else {
-               fseek(stat_fp, 0, SEEK_SET);
-       }
-       if (stat_fp == NULL) {
-               return;
-       }
+  if (!(stat_fp = open_file("/proc/stat", &rep)))
+    return;
+
        index = 0;
        while (!feof(stat_fp)) {
                if (fgets(buf, 255, stat_fp) == NULL)
@@ -464,7 +465,7 @@ inline static void update_stat()
                        info.mask |= (1 << INFO_CPU);
 
                        double delta = current_update_time - last_update_time;
-                       if (delta <= 0.001) return;     
+                       if (delta <= 0.001) break;      
 
                        cpu[index].cpu_val[0] = (cpu[index].cpu_active_total -  cpu[index].cpu_last_active_total) / 
                                                (float )(cpu[index].cpu_total - cpu[index].cpu_last_total); 
@@ -490,6 +491,7 @@ inline static void update_stat()
                }
 
        }
+  fclose (stat_fp);
 }
 
 void update_running_processes()
@@ -505,26 +507,29 @@ void update_cpu_usage()
 void update_load_average()
 {
 #ifdef HAVE_GETLOADAVG
-       double v[3];
-       getloadavg(v, 3);
-       info.loadavg[0] = (float) v[0];
-       info.loadavg[1] = (float) v[1];
-       info.loadavg[2] = (float) v[2];
-#else
-       static int rep;
-       FILE *fp;
-
-       fp = open_file("/proc/loadavg", &rep);
-       if (!fp) {
-               v[0] = v[1] = v[2] = 0.0;
-               return;
-       }
-
-       fscanf(fp, "%f %f %f", &info.loadavg[0], &info.loadavg[1],
-              &info.loadavg[2]);
-
-       fclose(fp);
+  if (!prefer_proc)
+  {
+         double v[3];
+         getloadavg(v, 3);
+         info.loadavg[0] = (float) v[0];
+         info.loadavg[1] = (float) v[1];
+         info.loadavg[2] = (float) v[2];
+  }
+  else
 #endif
+  {
+    static int rep = 0;
+    FILE *fp;
+
+    if (!(fp = open_file("/proc/loadavg", &rep)))
+    {
+      info.loadavg[0] = info.loadavg[1] = info.loadavg[2] = 0.0;
+      return;
+    }
+    fscanf(fp, "%f %f %f", &info.loadavg[0], &info.loadavg[1], &info.loadavg[2]);
+    fclose(fp);
+  }
+  info.mask |= (1 << INFO_LOADAVG);
 }
 
 #define PROC_I8K "/proc/i8k"
@@ -613,7 +618,7 @@ open_i2c_sensor(const char *dev, const char *type, int n, int *div,
 
        /* if i2c device is NULL or *, get first */
        if (dev == NULL || strcmp(dev, "*") == 0) {
-               static int rep;
+               static int rep = 0;
                if (!get_first_file_in_a_directory(I2C_DIR, buf, &rep))
                        return -1;
                dev = buf;
@@ -731,7 +736,7 @@ double get_i2c_info(int *fd, int div, char *devtype, char *type)
 
 void get_adt746x_fan( char * p_client_buffer, size_t client_buffer_size )
 {
-       static int rep;
+       static int rep = 0;
        char adt746x_fan_state[64];
        FILE *fp;
 
@@ -764,7 +769,7 @@ void get_adt746x_fan( char * p_client_buffer, size_t client_buffer_size )
 
 void get_adt746x_cpu( char * p_client_buffer, size_t client_buffer_size )
 {
-       static int rep;
+       static int rep = 0;
        char adt746x_cpu_state[64];
        FILE *fp;
 
@@ -855,33 +860,34 @@ void get_freq_dynamic( char * p_client_buffer, size_t client_buffer_size, char *
 char get_freq( char * p_client_buffer, size_t client_buffer_size, char * p_format, int divisor, unsigned int cpu )
 {
        FILE *f;
+  static int rep = 0;
        char frequency[32];
        char s[256];
        double freq = 0;
-       char current_freq_file[128];
        
-       cpu--;
-       snprintf(current_freq_file, 127, "%s/cpu%d/%s",
-                CPUFREQ_PREFIX, cpu, CPUFREQ_POSTFIX);
-
        if ( !p_client_buffer || client_buffer_size <= 0 || !p_format || divisor <= 0 )
                return 0;
        
-       f = fopen(current_freq_file, "r");
-       if (f) {
-               /* if there's a cpufreq /sys node, read the current frequency from this node;
-                * divide by 1000 to get Mhz. */
-               if (fgets(s, sizeof(s), f)) {
-                       s[strlen(s)-1] = '\0';
-                       freq = strtod(s, NULL);
-               }
-               fclose(f);
-               snprintf( p_client_buffer, client_buffer_size, p_format, (freq/1000)/divisor );
-               return 1;
+  if (!prefer_proc)
+  {
+    char current_freq_file[128];
+    snprintf(current_freq_file, 127, "%s/cpu%d/%s",CPUFREQ_PREFIX, cpu-1, CPUFREQ_POSTFIX);
+         f = fopen(current_freq_file, "r");
+         if (f) 
+    {
+                 /* if there's a cpufreq /sys node, read the current frequency from this node;
+                  * divide by 1000 to get Mhz. */
+                 if (fgets(s, sizeof(s), f)) {
+                           s[strlen(s)-1] = '\0';
+                           freq = strtod(s, NULL);
+                 }
+                 fclose(f);
+                 snprintf( p_client_buffer, client_buffer_size, p_format, (freq/1000)/divisor );
+                 return 1;
+    }
        }
        
-       cpu++;
-       f = fopen("/proc/cpuinfo", "r");                //open the CPU information file
+       f = open_file("/proc/cpuinfo", &rep);           //open the CPU information file
        if (!f) {
                perror("Conky: Failed to access '/proc/cpuinfo' at get_freq()");
                return 0;
@@ -1003,7 +1009,7 @@ char get_voltage( char * p_client_buffer, size_t client_buffer_size, char * p_fo
 
 void get_acpi_fan( char * p_client_buffer, size_t client_buffer_size )
 {
-       static int rep;
+       static int rep = 0;
        char buf[256];
        char buf2[256];
        FILE *fp;
@@ -1038,7 +1044,7 @@ void get_acpi_fan( char * p_client_buffer, size_t client_buffer_size )
 
 void get_acpi_ac_adapter( char * p_client_buffer, size_t client_buffer_size )
 {
-       static int rep;
+       static int rep = 0;
        char buf[256];
        char buf2[256];
        FILE *fp;
@@ -1094,7 +1100,7 @@ int open_acpi_temperature(const char *name)
        int fd;
 
        if (name == NULL || strcmp(name, "*") == 0) {
-               static int rep;
+               static int rep = 0;
                if (!get_first_file_in_a_directory
                    (ACPI_THERMAL_DIR, buf, &rep))
                        return -1;
@@ -1199,7 +1205,7 @@ static double last_battery_time;
 
 void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item)
 {
-       static int rep, rep2;
+       static int rep = 0, rep2 = 0;
        char acpi_path[128];
        snprintf(acpi_path, 127, ACPI_BATTERY_BASE_PATH "/%s/state", bat);
 
@@ -1225,8 +1231,8 @@ void get_battery_stuff(char *buf, unsigned int n, const char *bat, int item)
 
                /* read last full capacity if it's zero */
                if (acpi_last_full == 0) {
-                       static int rep;
-                       char path[128];
+                       static int rep = 0;
+      char path[128];
                        FILE *fp;
                        snprintf(path, 127,
                                 ACPI_BATTERY_BASE_PATH "/%s/info", bat);
@@ -1396,7 +1402,7 @@ static double pb_battery_info_update;
 #define PMU_PATH "/proc/pmu"
 void get_powerbook_batt_info(char *buf, size_t n, int i)
 {
-        static int rep;
+        static int rep = 0;
         const char* batt_path = PMU_PATH "/battery_0";
         const char* info_path = PMU_PATH "/info";
         int flags, charge, max_charge, ac = -1;
@@ -1503,7 +1509,8 @@ void update_top()
 void update_diskio()
 {
        static unsigned int last = UINT_MAX;
-       static FILE* fp;
+       FILE* fp;
+  static int rep=0;
 
        char buf[512];
        int major, minor;
@@ -1511,11 +1518,8 @@ void update_diskio()
        unsigned int reads, writes = 0;
        int col_count = 0;
 
-       if (!fp) {
-               fp = fopen("/proc/diskstats", "r");
-       } else {
-               fseek(fp, 0, SEEK_SET);
-       }
+       if (!(fp =open_file("/proc/diskstats", &rep)))
+      return;
 
        /* read reads and writes from all disks (minor = 0), including
         * cd-roms and floppies, and summ them up
@@ -1551,6 +1555,8 @@ void update_diskio()
        last = current;
 
        diskio_value = tot;
+
+  fclose(fp);
 }
 
 /* Here come the IBM ACPI-specific things. For reference, see
@@ -1780,26 +1786,444 @@ Peter Tarjan (ptarjan@citromail.hu)
 
 void update_entropy (void)
 {
-    static int rep;
-    const char *entropy_avail = "/proc/sys/kernel/random/entropy_avail";
-    const char *entropy_poolsize = "/proc/sys/kernel/random/poolsize";
-    FILE *fp1, *fp2;
+  static int rep = 0;
+  const char *entropy_avail = "/proc/sys/kernel/random/entropy_avail";
+  const char *entropy_poolsize = "/proc/sys/kernel/random/poolsize";
+  FILE *fp1, *fp2;
 
-    info.entropy.entropy_avail=0;
-    info.entropy.poolsize=0;
+  info.entropy.entropy_avail=0;
+  info.entropy.poolsize=0;
 
-    if ((fp1 = open_file (entropy_avail, &rep))==NULL)
-       return;
+  if ((fp1 = open_file (entropy_avail, &rep))==NULL)
+    return;
+
+  if ((fp2 = open_file (entropy_poolsize, &rep))==NULL)
+  {
+    fclose (fp1);
+    return;
+  }
+
+  fscanf (fp1, "%u", &info.entropy.entropy_avail);
+  fscanf (fp2, "%u", &info.entropy.poolsize);
+
+  fclose (fp1);
+  fclose (fp2);
 
-    if ((fp2 = open_file (entropy_poolsize, &rep))==NULL)
+  info.mask |= (1 << INFO_ENTROPY);
+}
+
+#ifdef HAVE_LIBDEXTER
+FILE *open_file(const char *file, int *reported)
+{
+  /* this version of open_file() is the hook that ties the client/server code 
+   * into conky. if conky wants to open a /proc file that the server is feeding 
+   * us, we do not return an ordinary file stream pointer to the local /proc 
+   * filesystem. instead, we return a string stream pointer to the proc surrogate, 
+   * so conky parses remote data as if it were local.
+   */
+  FILE *fp;
+
+  if ((strcmp (file,"/proc/cpuinfo")==0) && (procraw_mask & PROCRAW_CPUINFO))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.cpuinfo, procraw_data.cpuinfo_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/loadavg")==0) && (procraw_mask & PROCRAW_LOADAVG))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.loadavg, procraw_data.loadavg_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/meminfo")==0) && (procraw_mask & PROCRAW_MEMINFO))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.meminfo, procraw_data.meminfo_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/stat")==0) && (procraw_mask & PROCRAW_STAT))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.stat, procraw_data.stat_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/uptime")==0) && (procraw_mask & PROCRAW_UPTIME))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.uptime, procraw_data.uptime_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/net/dev")==0) && (procraw_mask & PROCRAW_NET_DEV))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.net_dev, procraw_data.net_dev_sz, "r");
+  }
+  else if ((strcmp (file,"/proc/diskstats")==0) && (procraw_mask & PROCRAW_DISKSTATS))
+  {
+    if (!procraw_sampler)
+      return NULL;
+    fp = fmemopen (procraw_data.diskstats, procraw_data.diskstats_sz, "r");
+  }
+  else
+  {
+    fp = fopen(file, "r");
+  }
+
+  if (!fp)
+  {
+    if (!reported || *reported == 0)
     {
-       fclose (fp1);
-       return;
+      ERR("can't open %s: %s", file, strerror(errno));
+      if (reported)
+        *reported = 1;
     }
+    return 0;
+  }
+  return fp;
+}
 
-    fscanf (fp1, "%u", &info.entropy.entropy_avail);
-    fscanf (fp2, "%u", &info.entropy.poolsize);
+void sampler_data_callback (gpointer sampler, gpointer sampler_data)
+{
+  /* callback runs in a thread */
+  if (!sampler)
+    return;
 
-    fclose (fp1);
-    fclose (fp2);
+  if (sampler_data)
+  {
+    FILE *out;
+    char *p;
+    unsigned int i;
+    DxtSysinfoProcrawData *data = (DxtSysinfoProcrawData *)sampler_data;
+
+    /* use GNU string streams and stdio locking to exchange data with main thread. */
+
+    /* update /proc/cpuinfo surrogate */
+    for (;data->cpuinfo;)
+    {
+      if (!(out = open_memstream (&procraw_data.cpuinfo, &procraw_data.cpuinfo_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.cpuinfo)
+      {
+        free (procraw_data.cpuinfo); procraw_data.cpuinfo=NULL;
+      }
+      for (p=data->cpuinfo, i=0; i<data->cpuinfo_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/loadavg surrogate */
+    for (;data->loadavg;)
+    {
+      if (!(out = open_memstream (&procraw_data.loadavg, &procraw_data.loadavg_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.loadavg)
+      {
+        free (procraw_data.loadavg); procraw_data.loadavg=NULL;
+      }
+      for (p=data->loadavg, i=0; i<data->loadavg_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/meminfo surrogate */
+    for (;data->meminfo;)
+    {
+      if (!(out = open_memstream (&procraw_data.meminfo, &procraw_data.meminfo_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.meminfo)
+      {
+        free (procraw_data.meminfo); procraw_data.meminfo=NULL;
+      }
+      for (p=data->meminfo, i=0; i<data->meminfo_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/stat surrogate */
+    for (;data->stat;)
+    {
+      if (!(out = open_memstream (&procraw_data.stat, &procraw_data.stat_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.stat)
+      {
+        free (procraw_data.stat); procraw_data.stat=NULL;
+      }
+      for (p=data->stat, i=0; i<data->stat_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/uptime surrogate */
+    for (;data->uptime;)
+    {
+      if (!(out = open_memstream (&procraw_data.uptime, &procraw_data.uptime_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.uptime)
+      {
+        free (procraw_data.uptime); procraw_data.uptime=NULL;
+      }
+      for (p=data->uptime, i=0; i<data->uptime_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/net/dev surrogate */
+    for (;data->net_dev;)
+    {
+      if (!(out = open_memstream (&procraw_data.net_dev, &procraw_data.net_dev_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.net_dev)
+      {
+        free (procraw_data.net_dev); procraw_data.net_dev=NULL;
+      }
+      for (p=data->net_dev, i=0; i<data->net_dev_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+    /* update /proc/diskstats surrogate */
+    for (;data->diskstats;)
+    {
+      if (!(out = open_memstream (&procraw_data.diskstats, &procraw_data.diskstats_sz)))
+        break;
+
+      flockfile (out);
+      if (procraw_data.diskstats)
+      {
+        free (procraw_data.diskstats); procraw_data.diskstats=NULL;
+      }
+      for (p=data->diskstats, i=0; i<data->diskstats_sz; i++, p++)
+      {
+        /* we have the FILE lock so use faster putc_unlocked() */
+        if (fputc_unlocked (*p, out) == EOF)
+          break;
+      }
+      fclose (out);
+      funlockfile (out);
+      break;
+    }
+
+  /* record data packet arrival time */
+  g_mutex_lock (packet_mutex);
+  clock_gettime (CLOCK_REALTIME, &packet_arrival_time);
+  g_mutex_unlock (packet_mutex);
+#ifdef DEBUG
+  fprintf(stderr, "Conky: data packet arrived\n");
+#endif
+
+  } /* if (sampler_data) ... */
+}
+
+/* return 0 on success, -1 on failure */
+int dexter_client_init (void)
+{
+  /* init libdexter for linux-specific client-side activity */
+
+  DexterServiceBroker       *broker;
+  DexterPluginServiceGroup  *service_group;
+  DexterPluginService       *procraw_service;
+  DexterSamplerDataCallback *callbacks;
+  GError                    *error = NULL;
+
+  /* create a service broker so we can query the server for its services */
+  if (!(broker = dexter_service_broker_new (info.dexter.channel)))
+  {
+    ERR ("unable to create service broker");
+    return (-1);
+  }
+
+  /* fetch the services from the server */
+  service_group = dexter_service_broker_get_services (broker, DEXTER_SERVICE_SAMPLER, &error);
+  if (error)
+  {
+    ERR("%s", error->message);
+    g_clear_error (&error);
+    dexter_service_broker_free (broker);
+    return (-1);
+  }
+
+  /* dont need service broker any more */
+  dexter_service_broker_free (broker);
+  broker=NULL;
+
+  /* find the procraw service */
+  procraw_service=NULL;
+  if (!dexterplugin_service_group_find_uuid (&procraw_service, service_group, PROCRAW_SERVICE_UUID))
+  {
+    ERR ("server doesn't offer the procraw service: (%s)", PROCRAW_SERVICE_UUID);
+    dexterplugin_service_group_free (service_group);
+    return (-1);
+  }
+
+  /* create null-terminated callback list with one callback on it */
+  callbacks = g_new0 (DexterSamplerDataCallback, 2);
+  callbacks[0] = sampler_data_callback;
+
+  /* create the procraw timed sampler, timed to match conky's update_interval */
+  procraw_sampler = dexter_timedsampler_new (procraw_service, update_interval*G_USEC_PER_SEC,
+                                             callbacks, info.dexter.channel, &error);
+  if (error)
+  {
+    ERR("%s", error->message);
+    g_clear_error (&error);
+    dexterplugin_service_group_free (service_group);
+    return (-1);
+  }
+
+  /* free callbacks as libdexter makes internal copy */
+  g_free (callbacks);
+  callbacks=NULL;
+
+  /* initialize the timed sampler */
+  procraw_mask = 0;
+  if (need_mask & (1 << INFO_FREQ))
+    procraw_mask |= PROCRAW_CPUINFO;
+  if (need_mask & (1 << INFO_LOADAVG))
+    procraw_mask |= PROCRAW_LOADAVG;
+  if ((need_mask & (1 << INFO_MEM)) || (need_mask & (1 << INFO_BUFFERS)))
+    procraw_mask |= PROCRAW_MEMINFO;
+  if ((need_mask & (1 << INFO_CPU)) || (need_mask & (1 << INFO_PROCS)) || 
+      (need_mask & (1 << INFO_RUN_PROCS)) || (need_mask & (1 << INFO_FREQ )))
+    procraw_mask |= PROCRAW_STAT;
+  if (need_mask & (1 << INFO_UPTIME))
+    procraw_mask |= PROCRAW_UPTIME;
+  if (need_mask & (1 << INFO_NET))
+    procraw_mask |= PROCRAW_NET_DEV;
+  if (need_mask & (1 << INFO_DISKIO))
+    procraw_mask |= PROCRAW_DISKSTATS;
+
+  dexter_timedsampler_initialize (procraw_sampler, &procraw_mask, NULL, &error);
+  if (error)
+  {
+    ERR("%s", error->message);
+    g_clear_error (&error);
+    dexter_timedsampler_free (procraw_sampler, NULL);
+    dexterplugin_service_group_free (service_group);
+    return (-1);
+  }
+
+  /* start the timed sampler and begin receiving updates from server */
+  dexter_timedsampler_start (procraw_sampler, &error);
+  if (error)
+  {
+    ERR("%s", error->message);
+    g_clear_error (&error);
+    dexter_timedsampler_free (procraw_sampler, NULL);
+    dexterplugin_service_group_free (service_group);
+    return (-1);
+  }
+
+  dexterplugin_service_group_free (service_group);
+
+  /* so far, so good.  tell the linux routines to read /proc, 
+   * even if other api's are available. */
+  prefer_proc = 1;
+
+  return 0;
 }
+
+/* return 0 on success, -1 on failure */
+int dexter_client_exit (void)
+{
+  /* de-init libdexter for linux-specific client-side activity */
+
+  if (procraw_sampler)
+  {
+    dexter_timedsampler_stop (procraw_sampler, NULL);
+    dexter_timedsampler_free (procraw_sampler, NULL);
+    procraw_sampler=NULL;
+  }
+  
+  /* free left-over sampler data.  ok to do this without thread sync because 
+   * this function runs in the same thread that conky issues open_file(). */
+  if (procraw_data.cpuinfo)
+  {
+    free (procraw_data.cpuinfo); procraw_data.cpuinfo=NULL;
+  }
+  if (procraw_data.loadavg)
+  {
+    free (procraw_data.loadavg); procraw_data.loadavg=NULL;
+  }
+  if (procraw_data.meminfo)
+  {
+    free (procraw_data.meminfo); procraw_data.meminfo=NULL;
+  }
+  if (procraw_data.stat)
+  {
+    free (procraw_data.stat); procraw_data.stat=NULL;
+  }
+  if (procraw_data.uptime)
+  {
+    free (procraw_data.uptime); procraw_data.uptime=NULL;
+  }
+  if (procraw_data.net_dev)
+  {
+    free (procraw_data.net_dev); procraw_data.net_dev=NULL;
+  }
+  if (procraw_data.diskstats)
+  {
+    free (procraw_data.diskstats); procraw_data.diskstats=NULL;
+  }
+
+  info.uptime=0.0;
+  info.procs=0;
+  info.mem = info.memmax = info.swap = info.swapmax = info.bufmem = info.buffers = info.cached = 0;
+  info.run_procs=0;
+  if (info.cpu_usage)
+  {
+    memset(info.cpu_usage, 0, info.cpu_count * sizeof (float));
+  }
+  clear_net_stats ();
+  diskio_value=0;
+  return 0;
+}
+#endif
index 13c562f..257df88 100644 (file)
@@ -370,3 +370,20 @@ void get_acpi_fan( char * p_client_buffer, size_t client_buffer_size )
 void update_entropy (void)
 {
 }
+
+#ifdef HAVE_LIBDEXTER
+/* return 0 on success, -1 on failure */
+int dexter_client_init (void)
+{
+    /* init libdexter for netbsd-specific client-side activity */
+    return 0;
+}
+
+/* return 0 on success, -1 on failure */
+int dexter_client_exit (void)
+{
+    /* de-init libdexter for netbsd-specific client-side activity */
+    return 0;
+}
+#endif
+
diff --git a/src/remotec.c b/src/remotec.c
deleted file mode 100644 (file)
index c0219fc..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Conky, a system monitor, based on torsmo
- *
- * This program is licensed under BSD license, read COPYING
- *
- *  $Id$
- */
- /*
- okay, nothing here right now.  thanks for coming out
- */
-
-#include "conky.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <netdb.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-
-#define PORT 3490 // the port client will be connecting to 
-
-#define MAXDATASIZE 100 // max number of bytes we can get at once 
-
-void client()
-{
-       int sockfd, numbytes;  
-       char buf[MAXDATASIZE];
-       struct hostent *he;
-       struct sockaddr_in their_addr; // connector's address information 
-       if ((he=gethostbyname("localhost")) == NULL) {  // get the host info 
-               perror("gethostbyname");
-               exit(1);
-       }
-
-       if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
-               perror("socket");
-               exit(1);
-       }
-
-       their_addr.sin_family = AF_INET;    // host byte order 
-       their_addr.sin_port = htons(PORT);  // short, network byte order 
-       their_addr.sin_addr = *((struct in_addr *)he->h_addr);
-       memset(&(their_addr.sin_zero), '\0', 8);  // zero the rest of the struct 
-
-       if (connect(sockfd, (struct sockaddr *)&their_addr,
-           sizeof(struct sockaddr)) == -1) {
-                   perror("connect");
-                   exit(1);
-           }
-
-           if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
-                   perror("recv");
-                   exit(1);
-           }
-
-           buf[numbytes] = '\0';
-
-           printf("Received: %s",buf);
-
-           close(sockfd);
-
-           return;
-}
diff --git a/src/remotec.h b/src/remotec.h
deleted file mode 100644 (file)
index 37ed44d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Conky, a system monitor, based on torsmo
- *
- * This program is licensed under BSD license, read COPYING
- *
- *  $Id$
- */
-  /*
- okay, nothing here right now.  thanks for coming out
-  */
-
-void client();
diff --git a/src/remoted.c b/src/remoted.c
deleted file mode 100644 (file)
index 9e094e1..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-* Conky, a system monitor, based on torsmo
-*
-* This program is licensed under BSD license, read COPYING
-*
-*  $Id$
-*/
-
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <sys/wait.h>
-#include <signal.h>
-
-static pthread_t daemon_thread;
-static int daemon_status = 0;
-static char *data;
-
-/* okay, heres how it will basically work.
-* when something connects, it will first send the conkyrc on the local (daemonized) server
-* after this, it will simply continue to send all the buffered text to the remote client
-* http://analyser.oli.tudelft.nl/beej/mirror/net/html/
-*  http://www.kegel.com/c10k.html
-*/
-
-#define MYPORT 3490    // the port users will be connecting to
-
-#define BACKLOG 10     // how many pending connections queue will hold
-
-void sigchld_handler(/*int s*/)
-{
-       while(wait(NULL) > 0);
-}
-
-void *daemon_loop()
-{
-       /* do something */
-
-
-
-       int sockfd, new_fd;  // listen on sock_fd, new connection on new_fd
-       struct sockaddr_in my_addr;    // my address information
-       struct sockaddr_in their_addr; // connector's address information
-       socklen_t  sin_size;
-       struct sigaction sa;
-       int yes=1;
-
-       if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
-               perror("socket");
-               exit(1);
-       }
-
-       if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int)) == -1) {
-               perror("setsockopt");
-               exit(1);
-       }
-       
-       my_addr.sin_family = AF_INET;         // host byte order
-       my_addr.sin_port = htons(MYPORT);     // short, network byte order
-       my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP
-       memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct
-
-       if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))
-                  == -1) {
-               perror("bind");
-               exit(1);
-                  }
-
-                  if (listen(sockfd, BACKLOG) == -1) {
-                          perror("listen");
-                          exit(1);
-                  }
-
-                  sa.sa_handler = sigchld_handler; // reap all dead processes
-                  sigemptyset(&sa.sa_mask);
-                  sa.sa_flags = SA_RESTART;
-                  if (sigaction(SIGCHLD, &sa, NULL) == -1) {
-                          perror("sigaction");
-                          exit(1);
-                  }
-
-                  while(1) {  // main accept() loop
-                          sin_size = sizeof(struct sockaddr_in);
-                          if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,
-                               &sin_size)) == -1) {
-                                       perror("accept");
-                                       continue;
-                               }
-                               printf("server: got connection from %s\n",
-                                      inet_ntoa(their_addr.sin_addr));
-                               if (!fork()) { // this is the child process
-                                       close(sockfd); // child doesn't need the listener
-                                       if (send(new_fd, data, 14, 0) == -1)
-                                               perror("send");
-                                       close(new_fd);
-                                       exit(0);
-                               }
-                               close(new_fd);  // parent doesn't need this
-                  }
-
-                  return 0;
-}
-
-void daemon_run(const char *s)
-{
-       /* create thread, keep an eye on it */
-       data = (char *)s;
-       int iret;
-       if (!daemon_status) {
-               daemon_status = 1;
-               iret = pthread_create(&daemon_thread, NULL, daemon_loop, NULL);
-       } else if (daemon_status == 1) {
-               /* thread is still running, we'll just wait for it to finish for now */
-               pthread_join(daemon_thread, NULL);
-               daemon_status = 0;
-       } else {
-               /* something else */
-       }
-}
diff --git a/src/remoted.h b/src/remoted.h
deleted file mode 100644 (file)
index b198389..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * Conky, a system monitor, based on torsmo
- *
- * This program is licensed under BSD license, read COPYING
- *
- *  $Id$
- */
-
-#include "conky.h"
-
-void daemon_run(const char *s);
index b0d71aa..477189b 100644 (file)
 /* private */
 struct _timed_thread 
 {
-    pthread_t thread;                  /* thread itself */
-    pthread_attr_t thread_attr;                /* thread attributes */
-    pthread_mutex_t cs_mutex;          /* critical section mutex */
-    pthread_mutex_t runnable_mutex;    /* only for the runnable_cond */
-    pthread_cond_t runnable_cond;      /* signalled to stop the thread */
-    unsigned int interval_usecs;       /* timed_thread_test() wait interval in microseconds */
+  pthread_t thread;               /* thread itself */
+  pthread_attr_t thread_attr;     /* thread attributes */
+  pthread_mutex_t cs_mutex;       /* critical section mutex */
+  pthread_mutex_t runnable_mutex; /* only for the runnable_cond */
+  pthread_cond_t runnable_cond;   /* signalled to stop the thread */
+  unsigned int interval_usecs;    /* timed_thread_test() wait interval in microseconds */
 };
 
 /* linked list of created threads */
 typedef struct _timed_thread_list
 {
-    timed_thread *p_timed_thread;
-    timed_thread **addr_of_p_timed_thread;
-    struct _timed_thread_list *next;
+  timed_thread *p_timed_thread;
+  timed_thread **addr_of_p_timed_thread;
+  struct _timed_thread_list *next;
 } timed_thread_node, timed_thread_list;
 
 static timed_thread_list *p_timed_thread_list_head = NULL;
@@ -59,33 +59,33 @@ static timed_thread_list *p_timed_thread_list_tail = NULL;
 timed_thread* 
 timed_thread_create (void *(*start_routine)(void*), void *arg, unsigned int interval_usecs)
 {
-    timed_thread *p_timed_thread;
+  timed_thread *p_timed_thread;
 
-    assert ((start_routine != NULL) && (interval_usecs >= MINIMUM_INTERVAL_USECS));
+  assert ((start_routine != NULL) && (interval_usecs >= MINIMUM_INTERVAL_USECS));
 
-    if ((p_timed_thread = calloc (sizeof(timed_thread), 1)) == 0)
-       return NULL;
+  if ((p_timed_thread = calloc (sizeof(timed_thread), 1)) == 0)
+    return NULL;
 
-    /* init attributes, e.g. joinable thread */
-    pthread_attr_init (&p_timed_thread->thread_attr);
-    pthread_attr_setdetachstate (&p_timed_thread->thread_attr, PTHREAD_CREATE_JOINABLE);
-    /* init mutexes */
-    pthread_mutex_init (&p_timed_thread->cs_mutex, NULL);
-    pthread_mutex_init (&p_timed_thread->runnable_mutex, NULL);
-    /* init cond */
-    pthread_cond_init (&p_timed_thread->runnable_cond, NULL);
+  /* init attributes, e.g. joinable thread */
+  pthread_attr_init (&p_timed_thread->thread_attr);
+  pthread_attr_setdetachstate (&p_timed_thread->thread_attr, PTHREAD_CREATE_JOINABLE);
+  /* init mutexes */
+  pthread_mutex_init (&p_timed_thread->cs_mutex, NULL);
+  pthread_mutex_init (&p_timed_thread->runnable_mutex, NULL);
+  /* init cond */
+  pthread_cond_init (&p_timed_thread->runnable_cond, NULL);
 
-    p_timed_thread->interval_usecs = interval_usecs;
+  p_timed_thread->interval_usecs = interval_usecs;
 
-    /* create thread */
-    if (pthread_create (&p_timed_thread->thread, &p_timed_thread->thread_attr, start_routine, arg))
-    {
-       timed_thread_destroy (p_timed_thread, NULL);
-       return NULL;
-    }
+  /* create thread */
+  if (pthread_create (&p_timed_thread->thread, &p_timed_thread->thread_attr, start_routine, arg))
+  {
+    timed_thread_destroy (p_timed_thread, NULL);
+    return NULL;
+  }
 
-    /*fprintf (stderr, "created timed thread 0x%08X\n", (unsigned)p_timed_thread);*/
-    return p_timed_thread;
+  /*fprintf (stderr, "created timed thread 0x%08X\n", (unsigned)p_timed_thread);*/
+  return p_timed_thread;
 }
 
 
@@ -94,27 +94,27 @@ timed_thread_create (void *(*start_routine)(void*), void *arg, unsigned int inte
 void 
 timed_thread_destroy (timed_thread* p_timed_thread, timed_thread** addr_of_p_timed_thread)
 {
-    assert (p_timed_thread != NULL);
-    assert ((addr_of_p_timed_thread == NULL) || (*addr_of_p_timed_thread == p_timed_thread));
-
-    /* signal thread to stop */
-    pthread_mutex_lock (&p_timed_thread->runnable_mutex);
-    pthread_cond_signal (&p_timed_thread->runnable_cond);
-    pthread_mutex_unlock (&p_timed_thread->runnable_mutex);
-
-    /* join the terminating thread */
-    pthread_join (p_timed_thread->thread, NULL);
-
-    /* clean up */
-    pthread_attr_destroy (&p_timed_thread->thread_attr);
-    pthread_mutex_destroy (&p_timed_thread->cs_mutex);
-    pthread_mutex_destroy (&p_timed_thread->runnable_mutex);
-    pthread_cond_destroy (&p_timed_thread->runnable_cond);
-
-    /*fprintf (stderr, "Conky: destroying thread 0x%08X\n", (unsigned)p_timed_thread);*/
-    free (p_timed_thread);
-    if (addr_of_p_timed_thread)
-       *addr_of_p_timed_thread = NULL;
+  assert (p_timed_thread != NULL);
+  assert ((addr_of_p_timed_thread == NULL) || (*addr_of_p_timed_thread == p_timed_thread));
+
+  /* signal thread to stop */
+  pthread_mutex_lock (&p_timed_thread->runnable_mutex);
+  pthread_cond_signal (&p_timed_thread->runnable_cond);
+  pthread_mutex_unlock (&p_timed_thread->runnable_mutex);
+
+  /* join the terminating thread */
+  pthread_join (p_timed_thread->thread, NULL);
+
+  /* clean up */
+  pthread_attr_destroy (&p_timed_thread->thread_attr);
+  pthread_mutex_destroy (&p_timed_thread->cs_mutex);
+  pthread_mutex_destroy (&p_timed_thread->runnable_mutex);
+  pthread_cond_destroy (&p_timed_thread->runnable_cond);
+
+  /*fprintf (stderr, "Conky: destroying thread 0x%08X\n", (unsigned)p_timed_thread);*/
+  free (p_timed_thread);
+  if (addr_of_p_timed_thread)
+    *addr_of_p_timed_thread = NULL;
 }
 
 
@@ -122,9 +122,9 @@ timed_thread_destroy (timed_thread* p_timed_thread, timed_thread** addr_of_p_tim
 int
 timed_thread_lock (timed_thread* p_timed_thread)
 {
-    assert (p_timed_thread != NULL);
+  assert (p_timed_thread != NULL);
 
-    return pthread_mutex_lock (&p_timed_thread->cs_mutex);
+  return pthread_mutex_lock (&p_timed_thread->cs_mutex);
 }
 
 
@@ -132,9 +132,9 @@ timed_thread_lock (timed_thread* p_timed_thread)
 int
 timed_thread_unlock (timed_thread* p_timed_thread)
 {
-    assert (p_timed_thread != NULL);
+  assert (p_timed_thread != NULL);
 
-    return pthread_mutex_unlock (&p_timed_thread->cs_mutex);
+  return pthread_mutex_unlock (&p_timed_thread->cs_mutex);
 }
 
 
@@ -144,37 +144,37 @@ timed_thread_unlock (timed_thread* p_timed_thread)
 int 
 timed_thread_test (timed_thread* p_timed_thread)
 {
-    struct timespec abstime, reltime;
-    int rc;
-
-    assert (p_timed_thread != NULL);
-
-    /* acquire runnable_cond mutex */
-    if (pthread_mutex_lock (&p_timed_thread->runnable_mutex))
-       return (-1);  /* could not acquire runnable_cond mutex, so tell caller to exit thread */
-
-    /* get the absolute time in the future we stop waiting for condition to signal */
-    clock_gettime (CLOCK_REALTIME, &abstime);
-    /* seconds portion of the microseconds interval */
-    reltime.tv_sec = (time_t)(p_timed_thread->interval_usecs / 1000000);
-    /* remaining microseconds convert to nanoseconds */
-    reltime.tv_nsec = (long)((p_timed_thread->interval_usecs % 1000000) * 1000);
-    /* absolute future time */
-    abstime.tv_sec += reltime.tv_sec;
-    abstime.tv_nsec += reltime.tv_nsec;
-
-    /* release mutex and wait until future time for runnable_cond to signal */
-    rc = pthread_cond_timedwait (&p_timed_thread->runnable_cond,
-                               &p_timed_thread->runnable_mutex,
-                               &abstime);
-    /* mutex re-acquired, so release it */
-    pthread_mutex_unlock (&p_timed_thread->runnable_mutex);
-
-    if (rc==0)
-       return 1; /* runnable_cond was signaled, so tell caller to exit thread */
-
-    /* tell caller not to exit yet */
-    return 0;
+  struct timespec abstime, reltime;
+  int rc;
+
+  assert (p_timed_thread != NULL);
+
+  /* acquire runnable_cond mutex */
+  if (pthread_mutex_lock (&p_timed_thread->runnable_mutex))
+    return (-1);  /* could not acquire runnable_cond mutex, so tell caller to exit thread */
+
+  /* get the absolute time in the future we stop waiting for condition to signal */
+  clock_gettime (CLOCK_REALTIME, &abstime);
+  /* seconds portion of the microseconds interval */
+  reltime.tv_sec = (time_t)(p_timed_thread->interval_usecs / 1000000);
+  /* remaining microseconds convert to nanoseconds */
+  reltime.tv_nsec = (long)((p_timed_thread->interval_usecs % 1000000) * 1000);
+  /* absolute future time */
+  abstime.tv_sec += reltime.tv_sec;
+  abstime.tv_nsec += reltime.tv_nsec;
+
+  /* release mutex and wait until future time for runnable_cond to signal */
+  rc = pthread_cond_timedwait (&p_timed_thread->runnable_cond,
+                               &p_timed_thread->runnable_mutex,
+                               &abstime);
+  /* mutex re-acquired, so release it */
+  pthread_mutex_unlock (&p_timed_thread->runnable_mutex);
+
+  if (rc==0)
+    return 1; /* runnable_cond was signaled, so tell caller to exit thread */
+
+  /* tell caller not to exit yet */
+  return 0;
 }
 
 
@@ -182,9 +182,9 @@ timed_thread_test (timed_thread* p_timed_thread)
 void 
 timed_thread_exit (timed_thread* p_timed_thread)
 {
-    assert (p_timed_thread != NULL);
+  assert (p_timed_thread != NULL);
 
-    pthread_exit (NULL);
+  pthread_exit (NULL);
 }
 
 
@@ -192,32 +192,32 @@ timed_thread_exit (timed_thread* p_timed_thread)
 int 
 timed_thread_register (timed_thread* p_timed_thread, timed_thread** addr_of_p_timed_thread)
 {
-    timed_thread_node *p_node;
-
-    assert (p_timed_thread != NULL);
-    assert ((addr_of_p_timed_thread == NULL) || (*addr_of_p_timed_thread == p_timed_thread));
+  timed_thread_node *p_node;
 
-    if ((p_node = calloc (sizeof (timed_thread_node), 1)) == 0)
-       return 0;
-    
-    p_node->p_timed_thread = p_timed_thread;
-    p_node->addr_of_p_timed_thread = addr_of_p_timed_thread;
-    p_node->next = NULL;
-
-    if (!p_timed_thread_list_tail)
-    {
-       /* first node of empty list */
-       p_timed_thread_list_tail = p_node;
-       p_timed_thread_list_head = p_node;
-    }
-    else
-    {
-       /* add node to tail of non-empty list */
-       p_timed_thread_list_tail->next = p_node;
-       p_timed_thread_list_tail = p_node;
-    }
+  assert (p_timed_thread != NULL);
+  assert ((addr_of_p_timed_thread == NULL) || (*addr_of_p_timed_thread == p_timed_thread));
 
+  if ((p_node = calloc (sizeof (timed_thread_node), 1)) == 0)
     return 0;
+    
+  p_node->p_timed_thread = p_timed_thread;
+  p_node->addr_of_p_timed_thread = addr_of_p_timed_thread;
+  p_node->next = NULL;
+
+  if (!p_timed_thread_list_tail)
+  {
+    /* first node of empty list */
+    p_timed_thread_list_tail = p_node;
+    p_timed_thread_list_head = p_node;
+  }
+  else
+  {
+    /* add node to tail of non-empty list */
+    p_timed_thread_list_tail->next = p_node;
+    p_timed_thread_list_tail = p_node;
+  }
+
+  return 0;
 }
 
 
@@ -225,19 +225,19 @@ timed_thread_register (timed_thread* p_timed_thread, timed_thread** addr_of_p_ti
 void 
 timed_thread_destroy_registered_threads (void)
 {
-    timed_thread_node *p_node, *p_next;
-
-    for (p_node=p_timed_thread_list_head;
-        p_node;
-        p_node=p_next)
-    {
-       p_next = p_node->next;
-       timed_thread_destroy (p_node->p_timed_thread, p_node->addr_of_p_timed_thread);
-       free (p_node);
-       p_node = NULL;
-    }
-
-    p_timed_thread_list_head = NULL;
-    p_timed_thread_list_tail = NULL;
+  timed_thread_node *p_node, *p_next;
+
+  for (p_node=p_timed_thread_list_head;
+       p_node;
+       p_node=p_next)
+  {
+    p_next = p_node->next;
+    timed_thread_destroy (p_node->p_timed_thread, p_node->addr_of_p_timed_thread);
+    free (p_node);
+    p_node = NULL;
+  }
+
+  p_timed_thread_list_head = NULL;
+  p_timed_thread_list_tail = NULL;
 }
 
index d35f303..888f917 100644 (file)
--- a/src/x11.c
+++ b/src/x11.c
@@ -26,8 +26,6 @@ int use_xdbe;
 int use_xft = 0;
 #endif
 
-#define WINDOW_NAME_FMT "%s - conky" 
-
 /* some basic X11 stuff */
 Display *display;
 int display_width;
@@ -185,8 +183,8 @@ inline void set_transparent_background(Window win)
        //XClearWindow(display, win); not sure why this was here
 }
 
-void init_window(int own_window, int w, int h, int set_trans, int back_colour, char * nodename, 
-                char **argv, int argc)
+void init_window(int own_window, int w, int h, int set_trans, int back_colour, 
+                            char **argv, int argc)
 {
        /* There seems to be some problems with setting transparent background (on
         * fluxbox this time). It doesn't happen always and I don't know why it
@@ -194,8 +192,6 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, c
        set_transparent = set_trans;
        background_colour = back_colour;
 
-       nodename = (char *)nodename;
-
 #ifdef OWN_WINDOW
        if (own_window) {
                
@@ -245,28 +241,26 @@ void init_window(int own_window, int w, int h, int set_trans, int back_colour, c
                        XClassHint classHint;
                        XWMHints wmHint;
                        Atom xa;
-                       char window_title[256];
 
                        /* Parent is root window so WM can take control */
                        window.window = XCreateWindow(display, 
                                                   window.root, 
-                                                  window.x, window.y, w, h, 0, 
+                                            window.x, window.y, w, h, 0, 
                                                   CopyFromParent,
                                                   InputOutput,
                                                   CopyFromParent,
                                                   CWBackPixel|CWOverrideRedirect,
                                                   &attrs);
 
-                       classHint.res_name = window.wm_class_name;
+                       classHint.res_name = window.class_name;
                        classHint.res_class = classHint.res_name;
 
                        wmHint.flags = InputHint | StateHint;
-                       wmHint.input = False;
+      /* allow decorated windows to be given input focus by WM */
+                       wmHint.input = TEST_HINT(window.hints,HINT_UNDECORATED) ? False : True;
                        wmHint.initial_state = NormalState;
 
-                       sprintf(window_title,WINDOW_NAME_FMT,nodename);
-
-                       XmbSetWMProperties (display, window.window, window_title, NULL, 
+                       XmbSetWMProperties (display, window.window, window.title, NULL, 
                                            argv, argc,
                                            NULL, &wmHint, &classHint);