diff options
| -rw-r--r-- | Makefile.am | 2 | ||||
| -rw-r--r-- | Makefile.in | 14 | ||||
| -rw-r--r-- | lcd4linux.conf.sample | 399 | ||||
| -rw-r--r-- | lcd4linux.conf.sample.old | 323 | ||||
| -rw-r--r-- | plugin.c | 12 | ||||
| -rw-r--r-- | plugin_cpuinfo.c | 10 | ||||
| -rw-r--r-- | plugin_loadavg.c | 82 | ||||
| -rw-r--r-- | plugin_meminfo.c | 119 | ||||
| -rw-r--r-- | widget_text.c | 36 | ||||
| -rw-r--r-- | widget_text.h | 57 | 
10 files changed, 719 insertions, 335 deletions
| diff --git a/Makefile.am b/Makefile.am index 3afc2ed..da198e3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -31,7 +31,9 @@ plugin_math.c \  plugin_string.c \  plugin_cfg.c \  plugin_uname.c \ +plugin_loadavg.c \  plugin_cpuinfo.c \ +plugin_meminfo.c \  plugin_i2c_sensors.c \  plugin_xmms.c \  system.c system.h \ diff --git a/Makefile.in b/Makefile.in index 89fcd4a..4389cfc 100644 --- a/Makefile.in +++ b/Makefile.in @@ -106,7 +106,7 @@ lcd4linux_LDADD = @DRIVERS@ @DRVLIBS@  #remove next line for liblcd4linux  lcd4linux_DEPENDENCIES = @DRIVERS@ -lcd4linux_SOURCES =  lcd4linux.c pid.c pid.h hash.c hash.h parser.c parser.h processor.c processor.h layout.c layout.h timer.c timer.h evaluator.c evaluator.h widget.c widget.h widget_text.c plugin.c plugin.h plugin_math.c plugin_string.c plugin_cfg.c plugin_uname.c plugin_cpuinfo.c plugin_i2c_sensors.c plugin_xmms.c system.c system.h isdn.c isdn.h wifi.c wifi.h mail.c mail.h seti.c seti.h battery.c battery.h dvb.c dvb.h filter.c filter.h exec.c exec.h expr.c expr.h mail2.c socket.c socket.h imon.c imon.h display.c display.h drv.c drv.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h +lcd4linux_SOURCES =  lcd4linux.c pid.c pid.h hash.c hash.h parser.c parser.h processor.c processor.h layout.c layout.h timer.c timer.h evaluator.c evaluator.h widget.c widget.h widget_text.c plugin.c plugin.h plugin_math.c plugin_string.c plugin_cfg.c plugin_uname.c plugin_loadavg.c plugin_cpuinfo.c plugin_meminfo.c plugin_i2c_sensors.c plugin_xmms.c system.c system.h isdn.c isdn.h wifi.c wifi.h mail.c mail.h seti.c seti.h battery.c battery.h dvb.c dvb.h filter.c filter.h exec.c exec.h expr.c expr.h mail2.c socket.c socket.h imon.c imon.h display.c display.h drv.c drv.h debug.c debug.h cfg.c cfg.h lock.c lock.h pixmap.c pixmap.h bar.c bar.h icon.c icon.h fontmap.c fontmap.h udelay.c udelay.h  #liblcd4linux_la_DEPENDENCIES = @DRIVERS@ @@ -150,7 +150,8 @@ lcd4linux_OBJECTS =  lcd4linux.$(OBJEXT) pid.$(OBJEXT) hash.$(OBJEXT) \  parser.$(OBJEXT) processor.$(OBJEXT) layout.$(OBJEXT) timer.$(OBJEXT) \  evaluator.$(OBJEXT) widget.$(OBJEXT) widget_text.$(OBJEXT) \  plugin.$(OBJEXT) plugin_math.$(OBJEXT) plugin_string.$(OBJEXT) \ -plugin_cfg.$(OBJEXT) plugin_uname.$(OBJEXT) plugin_cpuinfo.$(OBJEXT) \ +plugin_cfg.$(OBJEXT) plugin_uname.$(OBJEXT) plugin_loadavg.$(OBJEXT) \ +plugin_cpuinfo.$(OBJEXT) plugin_meminfo.$(OBJEXT) \  plugin_i2c_sensors.$(OBJEXT) plugin_xmms.$(OBJEXT) system.$(OBJEXT) \  isdn.$(OBJEXT) wifi.$(OBJEXT) mail.$(OBJEXT) seti.$(OBJEXT) \  battery.$(OBJEXT) dvb.$(OBJEXT) filter.$(OBJEXT) exec.$(OBJEXT) \ @@ -183,10 +184,11 @@ DEP_FILES =  .deps/BeckmannEgle.P .deps/Crystalfontz.P .deps/Cwlinux.P \  .deps/imon.P .deps/isdn.P .deps/layout.P .deps/lcd4linux.P .deps/lock.P \  .deps/mail.P .deps/mail2.P .deps/parport.P .deps/parser.P .deps/pid.P \  .deps/pixmap.P .deps/plugin.P .deps/plugin_cfg.P .deps/plugin_cpuinfo.P \ -.deps/plugin_i2c_sensors.P .deps/plugin_math.P .deps/plugin_string.P \ -.deps/plugin_uname.P .deps/plugin_xmms.P .deps/processor.P .deps/seti.P \ -.deps/socket.P .deps/system.P .deps/timer.P .deps/udelay.P \ -.deps/widget.P .deps/widget_text.P .deps/wifi.P +.deps/plugin_i2c_sensors.P .deps/plugin_loadavg.P .deps/plugin_math.P \ +.deps/plugin_meminfo.P .deps/plugin_string.P .deps/plugin_uname.P \ +.deps/plugin_xmms.P .deps/processor.P .deps/seti.P .deps/socket.P \ +.deps/system.P .deps/timer.P .deps/udelay.P .deps/widget.P \ +.deps/widget_text.P .deps/wifi.P  SOURCES = $(lcd4linux_SOURCES) $(EXTRA_lcd4linux_SOURCES)  OBJECTS = $(lcd4linux_OBJECTS) diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index e012f60..780876e 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -1,323 +1,76 @@ -# -# /etc/lcd4linux.conf -# configuration file for lcd4linux -# -# http://lcd4linux.sourceforge.net -# -# for the complete lcd4linux documentation please refer to  -# http://lcd4linux.sourceforge.net/manual.html - - -# driver-specific options -#  -# Display: -# the name of a display driver -# -# every driver has its own configuration options -# (e.g. 'Port', 'Speed', ...) -# for a detailed description of every option which is -# available for a specific driver please refer to -# http://lcd4linux.sourceforge.net/display/main.html  -# -#Display LCD2041 -#Port /dev/ttyS2 -#Speed 19200 -#Contrast 160 -# -#Display HD44780 -#Port /dev/parport0 -#Size 24x2 -#Delay 503 -# -#Display BLC100x -#Port /dev/ttyS2 -#Type 20x4 -# -#Display USBLCD -#Port /dev/usb/usblcd -#Size 20x4 -# -#Display PalmPilot -#Port /dev/ttyS2 -#Speed 4800 -#size 20x4 -#font 6x8 -#pixel 1+0 -#gap 0x0 -#border 2 -# -#Display PPM -#size 20x4 -#font 5x8 -#pixel 3+0 -#gap -1x-1 -#border 10 -#foreground \#102000 -#halfground \#70c000 -#background \#80d000 -# -#Display PNG -#size 20x4 -#font 5x8 -#pixel 2+0 -#gap -1x-1 -#border 5 -#foreground \#102000 -#halfground \#70c000 -#background \#80d000 -# -#Display X11 -#size 20x5 -#font 5x8 -#pixel 1+0 -#gap -1x-1 -#border 1 -#foreground \#102000 -#halfground \#90c000 -#background \#a0d000 -# -#Display Text -#size 40x8 -#TextBar 1 -# -#Display SIN -#Port /dev/tty9 - - -# timing options - all values are milliseconds -# -# please note that starting with 0.9.11 the settings tick, -# tack, tau are marked as obsolete and replaced by the -# following ones: -# -# Tick.Text: -# time between text updates - default is 500 -# -# Tick.bar : -# time between bar updates - default is 100 -# -# Tick.icon: -# time between icon updates - default is 100 -# -# Tick.gpo : -# time between gpo updates - default is 100 -# -#Tick.Text 500 -#Tick.bar 100 -#Tick.icon 100 -#Tick.gpo 100 - - -# data-specific options -# -# Overload: -# load average threshold and bar scaling -# -# SetiDir: -# directory where seti@home stores its data files -# -# Battwarning: -# flash bp-bar if running below Battwarning -# I use: Row6 "Bat%bp%bs%bd$r10bp+bp" -# which gives a nice flash effect - default is 10 -# -Overload 2.0 -SetiDir /etc/setiathome -#Battwarning 10 - - -# mail/news related options -# -# Mailbox[1..9]: -# defines the mailbox for querying -# the string may be a plain mbox file or a pop3/imap4/nntp -# server string with the following format: -#     pop3:[user[:pass]@]machine[:port] -#     imap4:[user[:pass]@]machine[:port][/dir] -#     nntp:[user[:pass]@]machine[:port][/dir] -# quering a plain (local) mbox file is achieved by giving -# the full path/name to the mbox file -# port defaults to 110 (pop3 query) and 143 (imap query) -# if [/dir] is not given, INBOX is assumed -# if [/dir] is given for nntp it should be a valid group name -# with '.' separating items -# if [/dir] is not given for nntp all/unread news of subscribed -# groups from Newsrc are calculated. -# -# Delay_e[1..9]: -# delay in seconds for querying Mailbox[1..9] - default is 5 -# -# Newsrc: -# path/name of your .newsrc file containing subscribed news -# please note that authorization on newsservers is currently untested -# user and pass may not contain a '/' with above syntax -# -#Mailbox1 /var/spool/mail/michi -#Delay_e1 5 -# -#Mailbox2 pop3:user:pass@machine -#Delay_e2 20 -# -#Mailbox3 imap4:user:pass@machine/folder -#Delay_e3 20 -# -#Mailbox4 nntp:server/at.linux -#Delay_e4 120 - - -# temperature sensors -# -# Sensor[1..9]: -# path to temperature file [1...9] -# -# Sensor[1..9]_min: -# temperature where the corresponding bar starts -# -# Sensor[1..9]_max: -# temperature where bar ends -# -# Sensor[1..9]_factor: -# formula to calculate real temperature -# (display_value=raw_value*factor+offset) -# lookup these values in /etc/sensors.conf -# -# Sensor[1..9]_offset: -# offset to calculate the real temperature -# -#Sensor1 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp1 -#Sensor1_min 30 -#Sensor1_max 50 -# -#Sensor2 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp2 -#Sensor2_min 30 -#Sensor2_max 50 -# -#Sensor3 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp3 -#Sensor3_min 30 -#Sensor3_max 50 - - - -# plugins -# -# x[1..9]: -# command to execute. predefined $PATH: -# PATH=/usr/local/bin:/usr/bin:/bin  -# $X[1..9] is the result of command x[1..9] in environment -# -# Tick_x[1..9]: -# delay in ticks (overrides Delay_x[1..9]) -# -# Delay_x[1..9]: -# delay in seconds - default is 1 -# -# Max_x[1..9]: -# max value for scaling bars - default is 100 (value should be numeric) -# -# Min_x[1..9]: -# min value for bars - default is 0 (should be != Max_x[1..9]) -# -#x1 tail -1 /var/log/messages -#Tick_x1 10 -#Delay_x1 1 -#Max_x1 50 -#Min_x1 10 -# -#x2 echo $X1 | cut -b25- - - -# display options -# -# Row[1..9]: -# text to display in row [1..9] -# -# the text to be displayed can contain specific directives which will -# be replaced by the appropriate values or will create bars or icons. -# for a detailed description of every possible directive please refer to -# http://lcd4linux.sourceforge.net/manual.html or -# /usr/share/doc/packages/lcd4linux/README.Rows -# -Row1 "Busy %cb%% $r14cs+cb" -Row2 "Load%l1%L$r14l1" -# -#Row1 "$u3l1$u3cb$u3cs $u3mu$u3ma$u3ms $u3dr$u3dw $u3nr$u3nw $u3ii$u3io" -#Row2 " " -#Row3 " " -#Row4 "CPU MEM IO IP" -# -#Row1 "*** %o %v ***" -#Row2 "%p CPU  %r MB RAM" -#Row3 "Busy %cb%% $r10cs+cb" -#Row4 "Load%l1%L$r10l1" -# -#Row1 "Load%l1%L$r10cs+cb" -#Row2 "Disk%dm $R10dr+dw" -#Row3 "Net %nm $R10nr+nw" -#Row4 "ISDN%im $r10ii+io" -#Row4 "DSL %tm $r10ti+to" -#Row5 "Temp%s2°$r10s1+s2" -# -#Row5 %x1 -#Row6 %x2 -# -#Row6 "Mails %e3/%u3" - - -# icons -# -# Icons: -# number of icons -# -# every icon you are reserving here is no longer available -# for bars. As most displays have only eight user-defineable -# characters, and a dual-bar needs at least five of them -# you should not use more than 3 icons in parallel -# with bars... -# -# Icon<num>.Bitmap<row>: -# bitmap row 'row' for icon 'num' -# -# for a detailed description of how to use icons please refer to -# http://lcd4linux.sourceforge.net/display/main.html -# -#Icons 1 -# -#Icon1.Bitmap1 ..... -#Icon1.Bitmap2 .*.*. -#Icon1.Bitmap3 ***** -#Icon1.Bitmap4 ***** -#Icon1.Bitmap5 .***. -#Icon1.Bitmap6 .***. -#Icon1.Bitmap7 ..*.. -#Icon1.Bitmap8 ..... - - -# virtual rows -# -# Rows: -# number of rows to use (maybe greater than your displays rows) -# -# Scroll: -# number of rows to scroll -# -# Turn: -# time in milliseconds between scrolling events -# -#Rows 10 -#Scroll 2 -#Turn 5000 - - -# general purpose outputs -# -# GPOs: -# number of outputs to use -# -# GPO[1..max]: -# token to use for GPO[1..max] -# -# the token should return a numeric value. If this value is greater -# than zero the output will be enabled otherwise disabled. -# please refer to the corresponding documentation under -# http://lcd4linux.sourceforge.net/display/main.html to -# find out if GPOs are supported with your display +Display LK204 { +    Driver 'MatrixOrbital' +    Model 'LK204-24-USB' +    Port '/dev/usb/tts/0' +    Port '/dev/tts/0' +    Speed 19200 +    Contrast 256/2 +} + +Widget OS { +    class 'Text' +    expression '*** '.uname('sysname').' '.uname('release').' ***' +    width 20 +    align 'C' +    update tick +} + +Widget CPU { +    class  'Text' +    expression  uname('machine') +    postfix ' CPU' +    width  10 +    align  'L' +    update tick +} + + +Widget RAM { +    class  'Text' +    expression meminfo('MemTotal')/1024 +    postfix ' MB RAM'	 +    width  5 +    precision 0 +    align  'R' +    update tick +} + +Widget Disk { +    class  'text' +    expression  Pi +    width 10 +    precision 2 +    align  'R' +    update tick +} + + +Widget LAN { +    class  'text' +    expression  "12.12345678" +    width 10 +    precision 2 +    align  'M' +    update tick +    speed tack +} + + +Layout Default { +    Row1 { +	Col1  'OS' +    } +    Row02 { +	Col1  'CPU' +	Col10 'RAM' +    } +} + +Display 'LK204' +Layout  'Default' + + +Variables { +   tick 500 +   tack 100 +} diff --git a/lcd4linux.conf.sample.old b/lcd4linux.conf.sample.old new file mode 100644 index 0000000..e012f60 --- /dev/null +++ b/lcd4linux.conf.sample.old @@ -0,0 +1,323 @@ +# +# /etc/lcd4linux.conf +# configuration file for lcd4linux +# +# http://lcd4linux.sourceforge.net +# +# for the complete lcd4linux documentation please refer to  +# http://lcd4linux.sourceforge.net/manual.html + + +# driver-specific options +#  +# Display: +# the name of a display driver +# +# every driver has its own configuration options +# (e.g. 'Port', 'Speed', ...) +# for a detailed description of every option which is +# available for a specific driver please refer to +# http://lcd4linux.sourceforge.net/display/main.html  +# +#Display LCD2041 +#Port /dev/ttyS2 +#Speed 19200 +#Contrast 160 +# +#Display HD44780 +#Port /dev/parport0 +#Size 24x2 +#Delay 503 +# +#Display BLC100x +#Port /dev/ttyS2 +#Type 20x4 +# +#Display USBLCD +#Port /dev/usb/usblcd +#Size 20x4 +# +#Display PalmPilot +#Port /dev/ttyS2 +#Speed 4800 +#size 20x4 +#font 6x8 +#pixel 1+0 +#gap 0x0 +#border 2 +# +#Display PPM +#size 20x4 +#font 5x8 +#pixel 3+0 +#gap -1x-1 +#border 10 +#foreground \#102000 +#halfground \#70c000 +#background \#80d000 +# +#Display PNG +#size 20x4 +#font 5x8 +#pixel 2+0 +#gap -1x-1 +#border 5 +#foreground \#102000 +#halfground \#70c000 +#background \#80d000 +# +#Display X11 +#size 20x5 +#font 5x8 +#pixel 1+0 +#gap -1x-1 +#border 1 +#foreground \#102000 +#halfground \#90c000 +#background \#a0d000 +# +#Display Text +#size 40x8 +#TextBar 1 +# +#Display SIN +#Port /dev/tty9 + + +# timing options - all values are milliseconds +# +# please note that starting with 0.9.11 the settings tick, +# tack, tau are marked as obsolete and replaced by the +# following ones: +# +# Tick.Text: +# time between text updates - default is 500 +# +# Tick.bar : +# time between bar updates - default is 100 +# +# Tick.icon: +# time between icon updates - default is 100 +# +# Tick.gpo : +# time between gpo updates - default is 100 +# +#Tick.Text 500 +#Tick.bar 100 +#Tick.icon 100 +#Tick.gpo 100 + + +# data-specific options +# +# Overload: +# load average threshold and bar scaling +# +# SetiDir: +# directory where seti@home stores its data files +# +# Battwarning: +# flash bp-bar if running below Battwarning +# I use: Row6 "Bat%bp%bs%bd$r10bp+bp" +# which gives a nice flash effect - default is 10 +# +Overload 2.0 +SetiDir /etc/setiathome +#Battwarning 10 + + +# mail/news related options +# +# Mailbox[1..9]: +# defines the mailbox for querying +# the string may be a plain mbox file or a pop3/imap4/nntp +# server string with the following format: +#     pop3:[user[:pass]@]machine[:port] +#     imap4:[user[:pass]@]machine[:port][/dir] +#     nntp:[user[:pass]@]machine[:port][/dir] +# quering a plain (local) mbox file is achieved by giving +# the full path/name to the mbox file +# port defaults to 110 (pop3 query) and 143 (imap query) +# if [/dir] is not given, INBOX is assumed +# if [/dir] is given for nntp it should be a valid group name +# with '.' separating items +# if [/dir] is not given for nntp all/unread news of subscribed +# groups from Newsrc are calculated. +# +# Delay_e[1..9]: +# delay in seconds for querying Mailbox[1..9] - default is 5 +# +# Newsrc: +# path/name of your .newsrc file containing subscribed news +# please note that authorization on newsservers is currently untested +# user and pass may not contain a '/' with above syntax +# +#Mailbox1 /var/spool/mail/michi +#Delay_e1 5 +# +#Mailbox2 pop3:user:pass@machine +#Delay_e2 20 +# +#Mailbox3 imap4:user:pass@machine/folder +#Delay_e3 20 +# +#Mailbox4 nntp:server/at.linux +#Delay_e4 120 + + +# temperature sensors +# +# Sensor[1..9]: +# path to temperature file [1...9] +# +# Sensor[1..9]_min: +# temperature where the corresponding bar starts +# +# Sensor[1..9]_max: +# temperature where bar ends +# +# Sensor[1..9]_factor: +# formula to calculate real temperature +# (display_value=raw_value*factor+offset) +# lookup these values in /etc/sensors.conf +# +# Sensor[1..9]_offset: +# offset to calculate the real temperature +# +#Sensor1 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp1 +#Sensor1_min 30 +#Sensor1_max 50 +# +#Sensor2 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp2 +#Sensor2_min 30 +#Sensor2_max 50 +# +#Sensor3 /proc/sys/dev/sensors/as99127f-i2c-0-2d/temp3 +#Sensor3_min 30 +#Sensor3_max 50 + + + +# plugins +# +# x[1..9]: +# command to execute. predefined $PATH: +# PATH=/usr/local/bin:/usr/bin:/bin  +# $X[1..9] is the result of command x[1..9] in environment +# +# Tick_x[1..9]: +# delay in ticks (overrides Delay_x[1..9]) +# +# Delay_x[1..9]: +# delay in seconds - default is 1 +# +# Max_x[1..9]: +# max value for scaling bars - default is 100 (value should be numeric) +# +# Min_x[1..9]: +# min value for bars - default is 0 (should be != Max_x[1..9]) +# +#x1 tail -1 /var/log/messages +#Tick_x1 10 +#Delay_x1 1 +#Max_x1 50 +#Min_x1 10 +# +#x2 echo $X1 | cut -b25- + + +# display options +# +# Row[1..9]: +# text to display in row [1..9] +# +# the text to be displayed can contain specific directives which will +# be replaced by the appropriate values or will create bars or icons. +# for a detailed description of every possible directive please refer to +# http://lcd4linux.sourceforge.net/manual.html or +# /usr/share/doc/packages/lcd4linux/README.Rows +# +Row1 "Busy %cb%% $r14cs+cb" +Row2 "Load%l1%L$r14l1" +# +#Row1 "$u3l1$u3cb$u3cs $u3mu$u3ma$u3ms $u3dr$u3dw $u3nr$u3nw $u3ii$u3io" +#Row2 " " +#Row3 " " +#Row4 "CPU MEM IO IP" +# +#Row1 "*** %o %v ***" +#Row2 "%p CPU  %r MB RAM" +#Row3 "Busy %cb%% $r10cs+cb" +#Row4 "Load%l1%L$r10l1" +# +#Row1 "Load%l1%L$r10cs+cb" +#Row2 "Disk%dm $R10dr+dw" +#Row3 "Net %nm $R10nr+nw" +#Row4 "ISDN%im $r10ii+io" +#Row4 "DSL %tm $r10ti+to" +#Row5 "Temp%s2°$r10s1+s2" +# +#Row5 %x1 +#Row6 %x2 +# +#Row6 "Mails %e3/%u3" + + +# icons +# +# Icons: +# number of icons +# +# every icon you are reserving here is no longer available +# for bars. As most displays have only eight user-defineable +# characters, and a dual-bar needs at least five of them +# you should not use more than 3 icons in parallel +# with bars... +# +# Icon<num>.Bitmap<row>: +# bitmap row 'row' for icon 'num' +# +# for a detailed description of how to use icons please refer to +# http://lcd4linux.sourceforge.net/display/main.html +# +#Icons 1 +# +#Icon1.Bitmap1 ..... +#Icon1.Bitmap2 .*.*. +#Icon1.Bitmap3 ***** +#Icon1.Bitmap4 ***** +#Icon1.Bitmap5 .***. +#Icon1.Bitmap6 .***. +#Icon1.Bitmap7 ..*.. +#Icon1.Bitmap8 ..... + + +# virtual rows +# +# Rows: +# number of rows to use (maybe greater than your displays rows) +# +# Scroll: +# number of rows to scroll +# +# Turn: +# time in milliseconds between scrolling events +# +#Rows 10 +#Scroll 2 +#Turn 5000 + + +# general purpose outputs +# +# GPOs: +# number of outputs to use +# +# GPO[1..max]: +# token to use for GPO[1..max] +# +# the token should return a numeric value. If this value is greater +# than zero the output will be enabled otherwise disabled. +# please refer to the corresponding documentation under +# http://lcd4linux.sourceforge.net/display/main.html to +# find out if GPOs are supported with your display @@ -1,4 +1,4 @@ -/* $Id: plugin.c,v 1.11 2004/01/14 11:33:00 reinelt Exp $ +/* $Id: plugin.c,v 1.12 2004/01/15 04:29:45 reinelt Exp $   *   * plugin handler for the Evaluator   * @@ -22,6 +22,12 @@   *   *   * $Log: plugin.c,v $ + * Revision 1.12  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + *   * Revision 1.11  2004/01/14 11:33:00  reinelt   * new plugin 'uname' which does what it's called   * text widget nearly finished @@ -107,7 +113,9 @@ int plugin_init_math (void);  int plugin_init_string (void);  int plugin_init_cfg (void);  int plugin_init_uname (void); +int plugin_init_loadavg (void);  int plugin_init_cpuinfo (void); +int plugin_init_meminfo (void);  int plugin_init_i2c_sensors (void);  int plugin_init_xmms (void); @@ -118,7 +126,9 @@ int plugin_init (void)    plugin_init_string();    plugin_init_cfg();    plugin_init_uname(); +  plugin_init_loadavg();    plugin_init_cpuinfo(); +  plugin_init_meminfo();    // MR: segfaults here    // plugin_init_i2c_sensors();    plugin_init_xmms(); diff --git a/plugin_cpuinfo.c b/plugin_cpuinfo.c index 60b0880..e9d4036 100644 --- a/plugin_cpuinfo.c +++ b/plugin_cpuinfo.c @@ -1,4 +1,4 @@ -/* $Id: plugin_cpuinfo.c,v 1.2 2004/01/14 11:33:00 reinelt Exp $ +/* $Id: plugin_cpuinfo.c,v 1.3 2004/01/15 04:29:45 reinelt Exp $   *   * plugin for /proc/cpuinfo parsing   * @@ -23,6 +23,12 @@   *   *   * $Log: plugin_cpuinfo.c,v $ + * Revision 1.3  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + *   * Revision 1.2  2004/01/14 11:33:00  reinelt   * new plugin 'uname' which does what it's called   * text widget nearly finished @@ -86,7 +92,7 @@ static void my_cpuinfo (RESULT *result, RESULT *arg1)        // strip leading blanks from key        while (isspace(*key)) *key++='\0';        // strip trailing blanks from key -      while (isspace(*--c)) *c='\0'; +      do *c='\0'; while (isspace(*--c));        // strip leading blanks from value        while (isspace(*val)) *val++='\0';        // strip trailing blanks from value diff --git a/plugin_loadavg.c b/plugin_loadavg.c new file mode 100644 index 0000000..2a78bcf --- /dev/null +++ b/plugin_loadavg.c @@ -0,0 +1,82 @@ +/* $Id: plugin_loadavg.c,v 1.1 2004/01/15 04:29:45 reinelt Exp $ + * + * plugin for load average + * + * Copyright 2003 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * This file is part of LCD4Linux. + * + * LCD4Linux is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * LCD4Linux is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * $Log: plugin_loadavg.c,v $ + * Revision 1.1  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + * + */ + +/*  + * exported functions: + * + * int plugin_init_loadavg (void) + *  adds functions for load average + * + */ + + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> + +#include "debug.h" +#include "plugin.h" + + +static void my_loadavg (RESULT *result, RESULT *arg1) +{ +  int nelem, index; +  double loadavg[3]; +   +  nelem=getloadavg(loadavg, 3); +  if (nelem<0) { +    error ("getloadavg() failed!"); +    SetResult(&result, R_STRING, ""); +    return; +  } + +  index=R2N(arg1); +  if (index<1 || index>nelem) { +    error ("loadavg(%d): index out of range!", index); +    SetResult(&result, R_STRING, ""); +    return; +  } +   +  SetResult(&result, R_NUMBER, &(loadavg[index-1])); +  return; +   +} + + +int plugin_init_loadavg (void) +{ +  AddFunction ("loadavg", 1, my_loadavg); +  return 0; +} + diff --git a/plugin_meminfo.c b/plugin_meminfo.c new file mode 100644 index 0000000..6115515 --- /dev/null +++ b/plugin_meminfo.c @@ -0,0 +1,119 @@ +/* $Id: plugin_meminfo.c,v 1.1 2004/01/15 04:29:45 reinelt Exp $ + * + * plugin for /proc/meminfo parsing + * + * Copyright 2003 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * This file is part of LCD4Linux. + * + * LCD4Linux is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * LCD4Linux is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * $Log: plugin_meminfo.c,v $ + * Revision 1.1  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + * + */ + +/*  + * exported functions: + * + * int plugin_init_meminfo (void) + *  adds functions to access /proc/meminfo + * + */ + + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <time.h> + +#include "debug.h" +#include "plugin.h" +#include "hash.h" + + +static void my_meminfo (RESULT *result, RESULT *arg1) +{ +  static HASH MemInfo = { 0, 0, NULL }; +   +  static time_t now=0; +  char *key, *val; +  int line; +   +  // reread every second only +  if (time(NULL)!=now) { +    FILE *stream; +     +    // destroy previous hash table +    hash_destroy (&MemInfo); + +    stream=fopen("/proc/meminfo", "r"); +    if (stream==NULL) { +      error ("fopen(/proc/meminfo) failed: %s", strerror(errno)); +      SetResult(&result, R_STRING, "");  +      return; +    } +     +    line=0; +    while (!feof(stream)) { +      char buffer[256]; +      char *c; +      fgets (buffer, sizeof(buffer), stream); +      c=strchr(buffer, ':'); +      if (c==NULL) continue; +      key=buffer; val=c+1; +      // strip leading blanks from key +      while (isspace(*key)) *key++='\0'; +      // strip trailing blanks from key +      do *c='\0'; while (isspace(*--c)); +      // strip leading blanks from value +      while (isspace(*val)) *val++='\0'; +      // strip trailing blanks from value +      for (c=val; *c!='\0';c++); +      while (isspace(*--c)) *c='\0'; +      // skip lines that do not end with " kB" +      if (*c=='B' && *(c-1)=='k' && *(c-2)==' ') { +	// strip trailing " kB" from value +	*(c-2)='\0'; +	// add entry to hash table +	hash_set (&MemInfo, key, val); +      } +    } +    fclose (stream); +    time(&now); +  } +   +  key=R2S(arg1); +  val=hash_get(&MemInfo, key); +  if (val==NULL) val=""; + +  SetResult(&result, R_STRING, val);  +} + + +int plugin_init_meminfo (void) +{ +  AddFunction ("meminfo", 1, my_meminfo); +  return 0; +} + diff --git a/widget_text.c b/widget_text.c index 95401ed..5f91c5d 100644 --- a/widget_text.c +++ b/widget_text.c @@ -1,4 +1,4 @@ -/* $Id: widget_text.c,v 1.4 2004/01/14 11:33:00 reinelt Exp $ +/* $Id: widget_text.c,v 1.5 2004/01/15 04:29:45 reinelt Exp $   *   * simple text widget handling   * @@ -21,6 +21,12 @@   *   *   * $Log: widget_text.c,v $ + * Revision 1.5  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + *   * Revision 1.4  2004/01/14 11:33:00  reinelt   * new plugin 'uname' which does what it's called   * text widget nearly finished @@ -136,7 +142,26 @@ void widget_text_update (void *Self)    WIDGET      *W = (WIDGET*)Self;    WIDGET_TEXT *T = W->data;    RESULT result = {0, 0.0, NULL}; -  char *value; +  char *prefix, *postfix, *value; +   +  // evaluate prefix +  if (T->prefix!=NULL && strlen(T->prefix)>0) { +    Eval(T->prefix, &result); +    prefix=strdup(R2S(&result)); +    DelResult (&result); +  } else { +    prefix=strdup(""); +  } +   +  // evaluate postfix +  if (T->postfix!=NULL && *(T->postfix)!='\0') { +    debug ("Eval_postfix(%s)", T->postfix); +    Eval(T->postfix, &result); +    postfix=strdup(R2S(&result)); +    DelResult (&result); +  } else { +    postfix=strdup(""); +  }    // evaluate expression    Eval(T->expression, &result); @@ -171,6 +196,8 @@ void widget_text_update (void *Self)        snprintf (value, size+1, "%.*f", precision, number);      }    } + +  DelResult (&result);    // has value changed?    if (T->value == NULL || strcmp(T->value, value)!=0) { @@ -190,7 +217,6 @@ void widget_text_update (void *Self)      free (value);    } -  DelResult (&result);  } @@ -208,6 +234,10 @@ int widget_text_init (WIDGET *Self)    T=malloc(sizeof(WIDGET_TEXT));    memset (T, 0, sizeof(WIDGET_TEXT)); +  // get raw pre- and postfix (we evaluate it ourselves) +  T->prefix  = cfg_get_raw (section, "prefix", NULL); +  T->postfix = cfg_get_raw (section, "prefix", NULL); +    // get raw expression (we evaluate it ourselves)    T->expression = cfg_get_raw (section, "expression",  "''"); diff --git a/widget_text.h b/widget_text.h new file mode 100644 index 0000000..7d678e8 --- /dev/null +++ b/widget_text.h @@ -0,0 +1,57 @@ +/* $Id: widget_text.h,v 1.1 2004/01/15 04:29:45 reinelt Exp $ + * + * simple text widget handling + * + * Copyright 2003,2004 Michael Reinelt <reinelt@eunet.at> + * Copyright 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> + * + * This file is part of LCD4Linux. + * + * LCD4Linux is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * LCD4Linux is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * $Log: widget_text.h,v $ + * Revision 1.1  2004/01/15 04:29:45  reinelt + * moved lcd4linux.conf.sample to *.old + * lcd4linux.conf.sample with new layout + * new plugins 'loadavg' and 'meminfo' + * text widget have pre- and postfix + * + */ + + +#ifndef _WIDGET_TEXT_H_ +#define _WIDGET_TEXT_H_ + +typedef enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT, ALIGN_MARQUEE } ALIGN; + +typedef struct WIDGET_TEXT { +  char *prefix;      // label on the left side +  char *postfix;     // label on the right side +  char *expression;  // expression that delivers the value +  char *value;       // evaluated value from expression +  char *buffer;      // string with 'width+1' bytes allocated  +  int   width;       // field width +  int   precision;   // number of digits after the decimal point +  ALIGN align;       // alignment: L, C, R, M(arquee) +  int   update;      // update interval +  int   scroll;      // marquee starting point +  int   speed;       // marquee scrolling speed +} WIDGET_TEXT; + + +extern WIDGET_CLASS Widget_Text; + +#endif | 
