[Pkg-wmaker-commits] [wmmon] 04/12: Import Debian changes 1.0b2-14

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sat Aug 12 22:44:03 UTC 2017


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch master
in repository wmmon.

commit df213c2f6e520dd808d4f29b3469678d3e55d10e
Author: Simon Law <sfllaw at debian.org>
Date:   Tue Aug 10 21:22:17 2004 -0400

    Import Debian changes 1.0b2-14
    
    wmmon (1.0b2-14) unstable; urgency=medium
    
      * Fixed build dependencies so we no longer depend on libxpm4-dev.
      * Quoted all strings in /usr/lib/menu/wmtime.
      * Add the ability to lock the mode, preventing cycling.  Thanks go to
        Chris Bechberger <bechberger at yahoo.com>.
    
    wmmon (1.0b2-13) unstable; urgency=low
    
      * Removed a memory leak that I introduced.  (Closes: Bug#223338)
    
    wmmon (1.0b2-12) unstable; urgency=low
    
      * Changed section to x11.
    
    wmmon (1.0b2-11) unstable; urgency=low
    
      * New maintainer.
      * Added a manual page.
      * Added the -geometry option.
      * Ensure that I/O mode works the same no matter how it is started.
        (Closes: Bug#94277)
      * Support new /proc/meminfo format in 2.6 kernels. (Closes: Bug#169160)
      * Fixed some buffer overflow problems.  (Closes: Bug#174949)
    
    wmmon (1.0b2-10) unstable; urgency=low
    
      * Fixed build depends (closes: #170133)
      * Applied patch from Simon Fowler <simon at himi.org> to fix /proc/meminfo
        parsing for linux 2.5.
    
    wmmon (1.0b2-9) unstable; urgency=low
    
      * Remove debug message (closes: #139408)
      * Applied patch from Frederik Schueler <fs at lowpingbastards.de>
        to fix /proc/stat parsing on linux 2.4 (closes: #144122)
---
 debian/changelog      |  49 ++++++++++
 debian/compat         |   1 +
 debian/control        |  36 ++++----
 debian/copyright      |  32 +++----
 debian/dirs           |   1 -
 debian/examples       |   1 +
 debian/manpages       |   1 +
 debian/menu           |  11 +--
 debian/rules          |  65 ++++++++++---
 debian/wmmonrc        |   3 +
 wmgeneral/wmgeneral.c |  24 ++++-
 wmmon/wmmon.1         | 192 ++++++++++++++++++++++++++++++++++++++
 wmmon/wmmon.c         | 250 +++++++++++++++++++++++++++++++++-----------------
 13 files changed, 518 insertions(+), 148 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index cda1def..1a3aaa0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,52 @@
+wmmon (1.0b2-14) unstable; urgency=medium
+
+  * Fixed build dependencies so we no longer depend on libxpm4-dev.
+  * Quoted all strings in /usr/lib/menu/wmtime.
+  * Add the ability to lock the mode, preventing cycling.  Thanks go to
+    Chris Bechberger <bechberger at yahoo.com>.
+
+ -- Simon Law <sfllaw at debian.org>  Tue, 10 Aug 2004 21:22:17 -0400
+
+wmmon (1.0b2-13) unstable; urgency=low
+
+  * Removed a memory leak that I introduced.  (Closes: Bug#223338)
+
+ -- Simon Law <sfllaw at debian.org>  Tue, 09 Dec 2003 12:42:41 -0500
+
+wmmon (1.0b2-12) unstable; urgency=low
+
+  * Changed section to x11.
+
+ -- Simon Law <sfllaw at debian.org>  Fri, 05 Dec 2003 11:17:21 -0500
+
+wmmon (1.0b2-11) unstable; urgency=low
+
+  * New maintainer.
+  * Added a manual page.
+  * Added the -geometry option.
+  * Ensure that I/O mode works the same no matter how it is started.
+    (Closes: Bug#94277)
+  * Support new /proc/meminfo format in 2.6 kernels. (Closes: Bug#169160)
+  * Fixed some buffer overflow problems.  (Closes: Bug#174949)
+
+ -- Simon Law <sfllaw at debian.org>  Wed, 26 Nov 2003 23:47:47 -0500
+
+wmmon (1.0b2-10) unstable; urgency=low
+
+  * Fixed build depends (closes: #170133)
+  * Applied patch from Simon Fowler <simon at himi.org> to fix /proc/meminfo
+    parsing for linux 2.5.
+
+ -- Fredrik Hallenberg <hallon at debian.org>  Fri, 22 Nov 2002 14:17:26 +0100
+
+wmmon (1.0b2-9) unstable; urgency=low
+
+  * Remove debug message (closes: #139408)
+  * Applied patch from Frederik Schueler <fs at lowpingbastards.de>
+    to fix /proc/stat parsing on linux 2.4 (closes: #144122)
+
+ -- Fredrik Hallenberg <hallon at debian.org>  Tue, 23 Apr 2002 21:39:09 +0200
+
 wmmon (1.0b2-8) unstable; urgency=low
 
   * Fixed menu path (closes: #129353)
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/debian/control b/debian/control
index 63ce5f4..5c23675 100644
--- a/debian/control
+++ b/debian/control
@@ -1,26 +1,24 @@
 Source: wmmon
-Section: utils
+Section: x11
 Priority: optional
-Maintainer: Fredrik Hallenberg <hallon at debian.org>
-Standards-Version: 3.5.6
-Build-Depends: debhelper, libxpm4-dev, xlib6g-dev
+Maintainer: Simon Law <sfllaw at debian.org>
+Standards-Version: 3.6.1
+Build-Depends: debhelper (>> 4.0.0), libx11-dev, libxpm-dev, libxext-dev
 
 Package: wmmon
 Architecture: any
-Depends: ${shlibs:Depends}
-Description: Monitor CPU load and average system load
- WMMon monitors the realtime CPU load as well the average
- system load and gives you some nice additional features too...
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: Window Maker dockapp for monitoring system information
+ WMMon monitors the realtime CPU load as well as the average system load,
+ and gives you some nice additional features too. It is intended for
+ docking in Window Maker.
  .
- WMMon currently provides:
+ It currently provides:
  .
-   * Realtime CPU 'stress' meter
-   * Average system load, like xload & wmavgload
-   * Average system load graphic is auto-scaling
-   * Realtime Disk I/O 'stress' meter
-   * Average Disk I/O load graphic (auto-scaling)
-   * Realtime total Mem & Swap usage meters
-   * System uptime display
-   * Realtime cycling through all monitor modes
-   * Can launch 3 user definable commands through ~/.wmmonrc
-   * Can be started multiple times
+   * a realtime CPU stress meter;
+   * an auto-scaled average system load meter, like xload and wmavgload;
+   * a realtime disk I/O stress meter;
+   * auto-scaled disk I/O load meter;
+   * realtime memory and swap usage meters;
+   * a display for system uptime;
+   * three user-defined commands to launch.
diff --git a/debian/copyright b/debian/copyright
index b388444..9bd1814 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -3,27 +3,23 @@ Wed, 15 Jul 1998 18:18:37 +0200.
 
 It was downloaded from http://www.xs4all.nl/~warp/files/wmmon-1.0b2.tar.gz
 
-Copyright:
+Upstream Copyright:
 
-WMMon.app is copyright (c) 1997, 1998 by Martijn Pieterse and
-Antoine Nulle and licensed through the GNU General Public License. 
+    Copyright (c) 1997, 1998 by Martijn Pieterse and Antoine Nulle
 
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the
+    Free Software Foundation; either version 2, or (at your option) any
+    later version.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 On Debian GNU/Linux systems, the complete text of the GNU General
-Public License can be found in `/usr/share/common-liceneses/GPL'.
-
-
+Public License can be found in `/usr/share/common-licenses/GPL'.
diff --git a/debian/dirs b/debian/dirs
index 74c5069..e772481 100644
--- a/debian/dirs
+++ b/debian/dirs
@@ -1,2 +1 @@
 usr/bin
-
diff --git a/debian/examples b/debian/examples
new file mode 100644
index 0000000..e9228bf
--- /dev/null
+++ b/debian/examples
@@ -0,0 +1 @@
+debian/wmmonrc
diff --git a/debian/manpages b/debian/manpages
new file mode 100644
index 0000000..9b628f7
--- /dev/null
+++ b/debian/manpages
@@ -0,0 +1 @@
+wmmon/wmmon.1
diff --git a/debian/menu b/debian/menu
index 802e8c3..829500d 100644
--- a/debian/menu
+++ b/debian/menu
@@ -1,7 +1,6 @@
 ?package(wmmon):\
-	       needs=X11\
-	       section=Apps/System\
-	       title="WMmon"\
-	       command="/usr/bin/wmmon"\
-	       hints="Monitoring,Dockapp"
-	     
+	needs="X11"\
+	section="Apps/System"\
+	title="WMmon"\
+	command="/usr/bin/wmmon"\
+	hints="Monitoring,Dockapp"
diff --git a/debian/rules b/debian/rules
index a2728a0..011dc0d 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,13 +1,41 @@
 #!/usr/bin/make -f
-# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
+#
+# debian/rules file for wmmon.
+# Copyright (C) 2003  Software in the Public Interest.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# 
+# Based on the sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
 
 # Uncomment this to turn on verbose mode.
 #export DH_VERBOSE=1
 
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+
 build: build-stamp
+
 build-stamp:
 	dh_testdir
 
+	# Add here commands to compile the package.
 	cd wmmon; $(MAKE)
 
 	touch build-stamp
@@ -15,22 +43,21 @@ build-stamp:
 clean:
 	dh_testdir
 	dh_testroot
-	rm -f build-stamp install-stamp
+	rm -f build-stamp 
 
+	# Add here commands to clean up after the build process.
 	-cd wmmon; $(MAKE) clean
 
 	dh_clean
 
-install: install-stamp
-install-stamp: build-stamp
+install: build
 	dh_testdir
 	dh_testroot
 	dh_clean -k
 	dh_installdirs
 
-	install -m 755 wmmon/wmmon `pwd`/debian/tmp/usr/bin
-
-	touch install-stamp
+	# Add here commands to install the package into debian/wmmon.
+	install -m 755 wmmon/wmmon $(CURDIR)/debian/wmmon/usr/bin
 
 # Build architecture-independent files here.
 binary-indep: build install
@@ -38,24 +65,32 @@ binary-indep: build install
 
 # Build architecture-dependent files here.
 binary-arch: build install
-#	dh_testversion
 	dh_testdir
 	dh_testroot
-	dh_installdocs BUGS HINTS README TODO
-	dh_undocumented wmmon.1
-	dh_installchangelogs CHANGES
+	dh_installdebconf
+	dh_installdocs
+	dh_installexamples
 	dh_installmenu
+#	dh_installlogrotate
+#	dh_installemacsen
+#	dh_installpam
+#	dh_installmime
+#	dh_installinit
+#	dh_installcron
+	dh_installman
+#	dh_installinfo
+	dh_installchangelogs CHANGES
+	dh_link
 	dh_strip
 	dh_compress
 	dh_fixperms
+#	dh_makeshlibs
 	dh_installdeb
+#	dh_perl
 	dh_shlibdeps
 	dh_gencontrol
 	dh_md5sums
 	dh_builddeb
 
-source diff:                                                                  
-	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
-
 binary: binary-indep binary-arch
-.PHONY: build clean binary-indep binary-arch binary
+.PHONY: build clean binary-indep binary-arch binary install 
diff --git a/debian/wmmonrc b/debian/wmmonrc
new file mode 100644
index 0000000..b4578b2
--- /dev/null
+++ b/debian/wmmonrc
@@ -0,0 +1,3 @@
+left: xterm
+middle: xload
+right: xcalc
diff --git a/wmgeneral/wmgeneral.c b/wmgeneral/wmgeneral.c
index a4f13c1..87be712 100644
--- a/wmgeneral/wmgeneral.c
+++ b/wmgeneral/wmgeneral.c
@@ -12,6 +12,8 @@
 	---
 	CHANGES:
 	---
+	10/10/2003 (Simon Law, sfllaw at debian.org)
+		* changed the parse_rcfile function to use getline instead of fgets.
 	02/05/1998 (Martijn Pieterse, pieterse at xs4all.nl)
 		* changed the read_rc_file to parse_rcfile, as suggester by Marcelo E. Magallon
 		* debugged the parse_rc file.
@@ -21,6 +23,7 @@
 
 */
 
+#define _GNU_SOURCE
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
@@ -83,17 +86,18 @@ int CheckMouseRegion(int, int);
 void parse_rcfile(const char *filename, rckeys *keys) {
 
 	char	*p;
-	char	temp[128];
+	char	*line = NULL;
+	size_t  line_size = 0;
 	char	*tokens = " :\t\n";
 	FILE	*fp;
 	int		i,key;
 
 	fp = fopen(filename, "r");
 	if (fp) {
-		while (fgets(temp, 128, fp)) {
+		while (getline(&line, &line_size, fp) >= 0) {
 			key = 0;
 			while (key >= 0 && keys[key].label) {
-				if ((p = strstr(temp, keys[key].label))) {
+				if ((p = strstr(line, keys[key].label))) {
 					p += strlen(keys[key].label);
 					p += strspn(p, tokens);
 					if ((i = strcspn(p, "#\n"))) p[i] = 0;
@@ -270,6 +274,7 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 	unsigned int	borderwidth = 1;
 	XClassHint		classHint;
 	char			*display_name = NULL;
+	char			*geometry = NULL;
 	char			*wname = argv[0];
 	XTextProperty	name;
 
@@ -282,7 +287,9 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 
 	for (i=1; argv[i]; i++) {
 		if (!strcmp(argv[i], "-display")) 
-			display_name = argv[i+1];
+			display_name = argv[++i];
+		else if (!strcmp(argv[i], "-geometry"))
+			geometry = argv[++i];
 	}
 
 	if (!(display = XOpenDisplay(display_name))) {
@@ -307,7 +314,11 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 	fore_pix = GetColor("black");
 
 	XWMGeometry(display, screen, Geometry, NULL, borderwidth, &mysizehints,
-				&mysizehints.x, &mysizehints.y,&mysizehints.width,&mysizehints.height, &dummy);
+	            &mysizehints.x, &mysizehints.y,
+	            &mysizehints.width, &mysizehints.height, &dummy);
+	if (geometry)
+		XParseGeometry(geometry, &mysizehints.x, &mysizehints.y,
+		               &mysizehints.width, &mysizehints.height);
 
 	mysizehints.width = 64;
 	mysizehints.height = 64;
@@ -364,3 +375,6 @@ void openXwindow(int argc, char *argv[], char *pixmap_bytes[], char *pixmask_bit
 	XMapWindow(display, win);
 
 }
+
+/* vim: sw=4 ts=4 columns=82
+ */
diff --git a/wmmon/wmmon.1 b/wmmon/wmmon.1
new file mode 100644
index 0000000..39a5e04
--- /dev/null
+++ b/wmmon/wmmon.1
@@ -0,0 +1,192 @@
+'\" t
+.\" Man page for wmmon
+.\" Copyright (c) 2003  Software in the Public Interest, Inc.
+.\"
+.\" This program is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or (at
+.\" your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful, but
+.\" WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+.\" General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write to the Free Software
+.\" Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+.\"
+.TH wmmon 1 "May 1998" "WMMON 1.0b2"
+
+.SH NAME
+wmmon \- Window Maker dockapp for monitoring system information
+
+.SH SYNOPSIS
+
+.B wmmon
+[
+.I OPTION
+]
+
+.SH DESCRIPTION
+
+.B WMMon
+monitors the realtime CPU load as well as the average system load,
+and gives you some nice additional features too. It is intended for
+docking in Window Maker.
+
+It currently provides:
+
+.IP \(bu 4
+a realtime CPU stress meter;
+.IP \(bu
+an auto-scaled average system load meter, like
+.B xload
+and
+.BR wmavgload ;
+.IP \(bu
+a realtime disk I/O stress meter;
+.IP \(bu
+auto-scaled disk I/O load meter;
+.IP \(bu
+realtime memory and swap usage meters;
+.IP \(bu
+a display for system uptime;
+.IP \(bu
+three user-defined commands to launch.
+
+.SH OPTIONS
+
+.TP
+.BI \-display \ display
+This option specifies the X server to contact; see
+.IR X(7x) .
+
+.TP
+.BI \-geometry \ geometry
+This option specifies the preferred position of clock; see
+.IR X(7x) .
+
+.TP
+.BR \-l
+Lock the mode, so that it cannot be cycled by clicking on the upper-left
+widget.  You can use this to open multiple copies of
+.BR WMMon ,
+each set to a different mode.
+
+.TP
+.BR \-i
+Start in disk I/O mode, which displays instantaneous disk usage and
+average disk load.
+
+.TP
+.BR \-s
+Start in system information mode, which displays memory usage, swap usage,
+and uptime.
+
+.TP
+.B \-h
+Show help information.
+
+.TP
+.B \-v
+Print the version number.
+
+.SH USAGE
+The
+.B WMMon
+display can be cycled between CPU, disk I/O, and system
+information displays by clicking on the upper-left widget.  This
+displays CPU information by default.
+
+WMMon can also be used to launch programs.  You may click either left,
+middle, or right mouse buttons in the average-load section of the
+window.  The pre-configured program will be launched according to the
+mouse button clicked.  (see
+.B CONFIGURATION FILE
+below.)
+
+In order to move
+.BR WMMon ,
+drag on the outer edges.  These are not sensitive to mouse clicks.
+
+.SH "DOCKING IN WINDOW MANAGERS"
+
+.TP
+Window Maker
+
+Window Maker users should drag and drop the
+.B WMMon
+window on the Dock.  Then, right-click on the border of the window and
+select \*(lqSettings...\*(rq.  Check \*(lqStart when Window Maker
+is started\*(rq.
+
+.TP
+AfterStep
+
+AfterStep users should put the following in their
+.I $HOME/.steprc
+
+.RS 16
+Wharf wmmon \- MaxSwallow "wmmon" wmmon &
+.RE
+
+.TP
+Other window managers
+
+.B WMMon
+runs nicely as a 64x64 shaped icon on your desktop.
+
+.SH "CONFIGURATION FILE"
+
+.B WMMon
+can launch three user-defined commands, triggered by left, middle and
+right mouse button clicks.  You can define the commands to launch in
+.I $HOME/.wmmonrc
+
+.RS
+.PD 0
+left: xterm
+.PP
+middle: xload
+.PP
+right: xcalc
+.PP
+.PD 
+.RE
+
+If
+.B WMMon
+detects a
+.I $HOME/.wmmonrc
+file, it will launch the appropriate command when you click on the clock.
+
+The system administrator can define default commands in
+.IR /etc/wmmonrc .
+The administrator may also choose to \*(lqfix\*(rq particular commands,
+making it impossible for users to change.  These commands can be defined in
+.IR /etc/wmmonrc.fixed ,
+although this isn't a nice thing to do.
+
+.SH FILES
+
+.I /etc/wmmonrc
+.br
+.I $HOME/.wmmonrc
+.br
+.I /etc/wmmonrc.fixed
+
+.SH AUTHORS
+
+.B WMMon
+was written by Martijn Pieterse and Antoine Nulle.
+
+This manual page was written by Simon Law <sfllaw at debian.org> for the
+.B Debian
+system (but may be used by others). It is based on the documentation provided
+by the original program.
+
+This manual is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
diff --git a/wmmon/wmmon.c b/wmmon/wmmon.c
index 2e1003d..410c2be 100644
--- a/wmmon/wmmon.c
+++ b/wmmon/wmmon.c
@@ -28,6 +28,12 @@
 	Changes:
 	----
 
+	15/05/2004 (Simon Law, sfllaw at debian.org)
+		* Support disabling of mode-cycling
+	23/10/2003 (Simon Law, sfllaw at debian.org)
+		* Eliminated exploitable static buffers
+		* Added -geometry support.
+		* /proc/meminfo support for Linux 2.6
 	18/05/1998 (Antoine Nulle, warp at xs4all.nl)
 		* MEM/SWAP/UPTIME only updated when visible
 		* Using global file descriptors to reduce file
@@ -65,6 +71,7 @@
 		* First Working Version
 */
 
+#define _GNU_SOURCE
 #include <stdlib.h>
 #include <stdio.h>
 #include <time.h>
@@ -100,31 +107,28 @@
  /* Global Variables */
 /********************/
 
-char	*ProgName;
 int	stat_current = 0; /* now global */
+int mode_cycling = 1; /* Allow mode-cycling */
 FILE	*fp_meminfo;
 FILE	*fp_stat;
 FILE	*fp_loadavg;
 
 /* functions */
-void usage(void);
+void usage(char*);
 void printversion(void);
 void DrawStats(int *, int, int, int, int);
 void DrawStats_io(int *, int, int, int, int);
 
 void wmmon_routine(int, char **);
 
-void main(int argc, char *argv[]) {
+int main(int argc, char *argv[]) {
 
 	int		i;
+	char	*name = argv[0];
 	
 
 	/* Parse Command Line */
 
-	ProgName = argv[0];
-	if (strlen(ProgName) >= 5)
-		ProgName += (strlen(ProgName) - 5);
-	
 	for (i=1; i<argc; i++) {
 		char *arg = argv[i];
 
@@ -132,13 +136,17 @@ void main(int argc, char *argv[]) {
 			switch (arg[1]) {
 			case 'd' :
 				if (strcmp(arg+1, "display")) {
-					usage();
-					exit(1);
+					usage(name);
+					return 1;
 				}
 				break;
-			case 'v' :
-				printversion();
-				exit(0);
+			case 'g' :
+				if (strcmp(arg+1, "geometry")) {
+					usage(name);
+					return 1;
+				}
+			case 'l' :
+				mode_cycling = 0;
 				break;
 			case 'i' :
 				stat_current = 1;
@@ -146,15 +154,20 @@ void main(int argc, char *argv[]) {
 			case 's' :
 				stat_current = 2;
 				break;
+			case 'v' :
+				printversion();
+				return 0;
 			default:
-				usage();
-				exit(0);
-				break;
+				usage(name);
+				return 1;
 			}
 		}
 	}
 
 	wmmon_routine(argc, argv);
+  
+      exit (0);
+   
 }
 
 /*******************************************************************************\
@@ -214,8 +227,7 @@ void wmmon_routine(int argc, char **argv) {
 	long		idle;
 
 	FILE		*fp;
-	char		temp[128];
-	char		*p;
+	char		*conffile = NULL;
 
 	int			xpm_X = 0, xpm_Y = 0;
 
@@ -246,16 +258,21 @@ void wmmon_routine(int argc, char **argv) {
 	if (RIGHT_ACTION) right_action = strdup(RIGHT_ACTION);
 	if (MIDDLE_ACTION) middle_action = strdup(MIDDLE_ACTION);
 
-	strcpy(temp, "/etc/wmmonrc");
-	parse_rcfile(temp, wmmon_keys);
+	/* Scan through the .rc files */
+	if (asprintf(&conffile, "/etc/wmmonrc") >= 0) {
+		parse_rcfile(conffile, wmmon_keys);
+		free(conffile);
+	}
 
-	p = getenv("HOME");
-	strcpy(temp, p);
-	strcat(temp, "/.wmmonrc");
-	parse_rcfile(temp, wmmon_keys);
-	
-	strcpy(temp, "/etc/wmmonrc.fixed");
-	parse_rcfile(temp, wmmon_keys);
+	if (asprintf(&conffile, "%s/.wmmonrc", getenv("HOME")) >= 0) {
+		parse_rcfile(conffile, wmmon_keys);
+		free(conffile);
+	}
+
+	if (asprintf(&conffile, "/etc/wmmonrc.fixed") >= 0) {
+		parse_rcfile(conffile, wmmon_keys);
+		free(conffile);
+	}
 
 	stat_online = checksysdevs();
 
@@ -269,26 +286,36 @@ void wmmon_routine(int argc, char **argv) {
 	starttime = time(0);
 	nexttime = starttime + 10;
 
+	/* Collect information on each panel */
 	for (i=0; i<stat_online; i++) {
 		get_statistics(stat_device[i].name, &k, &istat, &idle);
 		stat_device[i].statlast = istat;
 		stat_device[i].idlelast = idle;
 	}
-	if (stat_current == 0) DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
-	if (stat_current == 1) {
-		DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
-	}
-	if (stat_current == 2) {
-		xpm_X = 64;
-		setMaskXY(-64, 0);
-	} else {
-		xpm_X = 0;
-		setMaskXY(0, 0);
+
+	/* Set the mask for the current window */
+	switch (stat_current) {
+		case 0:
+		case 1:
+			xpm_X = 0;
+			setMaskXY(0, 0);
+			break;
+		case 2:
+			xpm_X = 64;
+			setMaskXY(-64, 0);
+		default:
+			break;
 	}
+
+	/* Draw statistics */
+	if (stat_current == 0)
+		DrawStats(stat_device[stat_current].his, 54, 40, 5, 58);
+	if (stat_current == 1)
+		DrawStats_io(stat_device[stat_current].his, 54, 40, 5, 58);
 	DrawActive(stat_device[stat_current].name);
 
 	while (1) {
-		curtime = time(0);
+		curtime = time(NULL);
 
 		waitpid(0, NULL, WNOHANG);
 
@@ -414,7 +441,7 @@ void wmmon_routine(int argc, char **argv) {
 				break;
 			case ButtonRelease:
 				i = CheckMouseRegion(Event.xbutton.x, Event.xbutton.y);
-				if (but_stat == i && but_stat >= 0) {
+				if (but_stat == i && but_stat >= 0 && mode_cycling) {
 					switch (but_stat) {
 					case 0:
 						switch (Event.xbutton.button) {
@@ -433,7 +460,6 @@ void wmmon_routine(int argc, char **argv) {
 						}
 					case 1:
 						stat_current++;
-						printf("current stat is :%d\n", stat_current);
 						if (stat_current == stat_online)
 							stat_current = 0;
 
@@ -502,43 +528,80 @@ void update_stat_io(stat_dev *st) {
 
 void update_stat_mem(stat_dev *st, stat_dev *st2) {
 
-	char	temp[128];
+	static char *line = NULL;
+	static size_t line_size = 0;
+
+	unsigned long swapfree;
 	unsigned long free, shared, buffers, cached;
 
 	freopen("/proc/meminfo", "r", fp_meminfo);
-	while (fgets(temp, 128, fp_meminfo)) {
-		if (strstr(temp, "Mem:")) {
-			sscanf(temp, "Mem: %ld %ld %ld %ld %ld %ld",
-			       &st->rt_idle, &st->rt_stat,
-			       &free, &shared, &buffers, &cached);
-			st->rt_idle >>= 10;
-			st->rt_stat -= buffers+cached;
-			st->rt_stat >>= 10;
-//			break;
+	while ((getline(&line, &line_size, fp_meminfo)) > 0) {
+		/* The original format for the first two lines of /proc/meminfo was
+		 * Mem: total used free shared buffers cached
+		 * Swap: total used free
+		 *
+		 * As of at least 2.5.47 these two lines were removed, so that the
+		 * required information has to come from the rest of the lines.
+		 * On top of that, used is no longer recorded - you have to work
+		 * this out yourself, from total - free.
+		 *
+		 * So, these changes below should work. They should also work with
+		 * older kernels, too, since the new format has been available for
+		 * ages.
+		 */
+		if (strstr(line, "MemTotal:")) {
+			sscanf(line, "MemTotal: %ld", &st->rt_idle);
 		}
-		if (strstr(temp, "Swap:")) {
-			sscanf(temp, "Swap: %ld %ld", &st2->rt_idle, &st2->rt_stat);
-			st2->rt_idle >>= 10;
-			st2->rt_stat >>= 10;
-			break;
+		else if (strstr(line, "MemFree:")) {
+			sscanf(line, "MemFree: %ld", &free);
+		}
+		else if (strstr(line, "MemShared:")) {
+			sscanf(line, "MemShared: %ld", &shared);
+		}
+		else if (strstr(line, "Buffers:")) {
+			sscanf(line, "Buffers: %ld", &buffers);
+		}
+		else if (strstr(line, "Cached:")) {
+			sscanf(line, "Cached: %ld", &cached);
+		}
+		else if (strstr(line, "SwapTotal:")) {
+			sscanf(line, "SwapTotal: %ld", &st2->rt_idle);
+		}
+		else if (strstr(line, "SwapFree:")) {
+			sscanf(line, "SwapFree: %ld", &swapfree);
 		}
 	}
+
+	/* memory use - rt_stat is the amount used, it seems, and this isn't
+	 * recorded in current version of /proc/meminfo (as of 2.5.47), so we
+	 * calculate it from MemTotal - MemFree
+	 */
+	st->rt_stat = st->rt_idle - free;
+	st->rt_stat -= buffers+cached;
+	/* As with the amount of memory used, it's not recorded any more, so
+	 * we have to calculate it ourselves.
+	 */
+	st2->rt_stat = st2->rt_idle - swapfree;
 }
 
 void update_stat_swp(stat_dev *st) {
 
-	char	temp[128];
+	static char *line = NULL;
+	static size_t line_size = 0;
+	unsigned long swapfree;
 
 	fseek(fp_meminfo, 0, SEEK_SET);
-	while (fgets(temp, 128, fp_meminfo)) {
-		if (strstr(temp, "Swap:")) {
-			sscanf(temp, "Swap: %ld %ld", &st->rt_idle, &st->rt_stat);
-			st->rt_idle >>= 10;
-			st->rt_stat >>= 10;
-			break;
+	while ((getline(&line, &line_size, fp_meminfo)) > 0) {
+		/* As with update_stat_mem(), the format change to /proc/meminfo has
+		 * forced some changes here. */
+		if (strstr(line, "SwapTotal:")) {
+			sscanf(line, "SwapTotal: %ld", &st->rt_idle);
+		}
+		else if (strstr(line, "SwapFree:")) {
+			sscanf(line, "SwapFree: %ld", &swapfree);
 		}
 	}
-
+	st->rt_stat = st->rt_idle - swapfree;
 }
 
 /*******************************************************************************\
@@ -548,11 +611,11 @@ void update_stat_swp(stat_dev *st) {
 void get_statistics(char *devname, long *is, long *ds, long *idle) {
 
 	int	i;
-	char	temp[128];
+	static char *line = NULL;
+	static size_t line_size = 0;
 	char	*p;
 	char	*tokens = " \t\n";
 	float	f;
-	long	maxdiskio=0;
 
 	*is = 0;
 	*ds = 0;
@@ -560,9 +623,9 @@ void get_statistics(char *devname, long *is, long *ds, long *idle) {
 
 	if (!strncmp(devname, "cpu", 3)) {
 		fseek(fp_stat, 0, SEEK_SET);
-		while (fgets(temp, 128, fp_stat)) {
-			if (strstr(temp, "cpu")) {
-				p = strtok(temp, tokens);
+		while ((getline(&line, &line_size, fp_stat)) > 0) {
+			if (strstr(line, "cpu ")) {
+				p = strtok(line, tokens);
 				/* 1..3, 4 == idle, we don't want idle! */
 				for (i=0; i<3; i++) {
 					p = strtok(NULL, tokens);
@@ -580,17 +643,35 @@ void get_statistics(char *devname, long *is, long *ds, long *idle) {
 	if (!strncmp(devname, "i/o", 3)) {
 
 		fseek(fp_stat, 0, SEEK_SET);
-		while (fgets(temp, 128, fp_stat)) {
-			if (strstr(temp, "disk_rio") || strstr(temp, "disk_wio")) {
-				p = strtok(temp, tokens);
+		while ((getline(&line, &line_size, fp_stat)) > 0) {
+			if (strstr(line, "disk_rio") || strstr(line, "disk_wio")) {
+				p = strtok(line, tokens);
 				/* 1..4 */
 				for (i=0; i<4; i++) {
 					p = strtok(NULL, tokens);
 					*ds += atol(p);
 				}
 			}
+			else if (strstr(line, "disk_io")) {
+				int val;
+				unsigned int a, b, c, d, e, h, g;
+   
+				p = strtok(line, tokens);
+   
+				while ((p = strtok(NULL, tokens))) {
+					val = sscanf (p,
+						      "(%d,%d):(%d,%d,%d,%d,%d)",
+						      &a, &b, &c, &d, &e, &h,
+						      &g);
+   
+					if (val != 7)
+						continue;
+   
+					*ds += d;
+					*ds += h;
+				}
+			}
 		}
-		if (*ds > maxdiskio) maxdiskio = *ds;
 	}
 }
 
@@ -718,16 +799,17 @@ void DrawStats_io(int *his, int num, int size, int x_left, int y_bottom) {
 |* usage																	   *|
 \*******************************************************************************/
 
-void usage(void) {
-
-	fprintf(stderr, "\nwmmon - programming: tijno, (de)bugging & design warp, webhosting: bobby\n\n");
-	fprintf(stderr, "usage:\n");
-	fprintf(stderr, "\t-display <display name>\n");
-	fprintf(stderr, "\t-h\tthis screen\n");
-	fprintf(stderr, "\t-v\tprint the version number\n");
-	fprintf(stderr, "\t-i\tstartup in DiskIO mode\n");
-	fprintf(stderr, "\t-s\tstartup in SysInfo mode\n");
-	fprintf(stderr, "\n");
+void usage(char *name) {
+	printf("Usage: %s [OPTION]...\n", name);
+	printf("WindowMaker dockapp that displays system information.\n");
+	printf("\n");
+	printf("  -display DISPLAY     contact the DISPLAY X server\n");
+	printf("  -geometry GEOMETRY   position the clock at GEOMETRY\n");
+	printf("  -l                   locked view - cannot cycle modes\n");
+	printf("  -i                   start in Disk I/O mode\n");
+	printf("  -s                   start in System Info mode\n");
+	printf("  -h                   display this help and exit\n");
+	printf("  -v                   output version information and exit\n");
 }
 
 /*******************************************************************************\
@@ -736,7 +818,7 @@ void usage(void) {
 
 void printversion(void) {
 
-	if (!strcmp(ProgName, "wmmon")) {
-		fprintf(stderr, "%s\n", WMMON_VERSION);
-	}
+	printf("WMMon version %s\n", WMMON_VERSION);
 }
+/* vim: sw=4 ts=4 columns=82
+ */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmmon.git



More information about the Pkg-wmaker-commits mailing list