summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sysutils/Makefile1
-rw-r--r--sysutils/wmmemfree/Makefile32
-rw-r--r--sysutils/wmmemfree/distinfo1
-rw-r--r--sysutils/wmmemfree/files/mem_freebsd.c125
-rw-r--r--sysutils/wmmemfree/files/mem_freebsd.h32
-rw-r--r--sysutils/wmmemfree/files/patch-Makefile54
-rw-r--r--sysutils/wmmemfree/files/patch-draw.c11
-rw-r--r--sysutils/wmmemfree/files/patch-wmmemfree.c16
-rw-r--r--sysutils/wmmemfree/pkg-descr4
-rw-r--r--sysutils/wmmemfree/pkg-plist1
10 files changed, 277 insertions, 0 deletions
diff --git a/sysutils/Makefile b/sysutils/Makefile
index 1a1ae63b212e..9862aa233d88 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -280,6 +280,7 @@
SUBDIR += wminet
SUBDIR += wmlmmon
SUBDIR += wmlongrun
+ SUBDIR += wmmemfree
SUBDIR += wmmemload
SUBDIR += wmmemmon
SUBDIR += wmmon
diff --git a/sysutils/wmmemfree/Makefile b/sysutils/wmmemfree/Makefile
new file mode 100644
index 000000000000..408e0b0964a9
--- /dev/null
+++ b/sysutils/wmmemfree/Makefile
@@ -0,0 +1,32 @@
+# New ports collection makefile for: wmmemfree
+# Date created: 29 Mar 2003
+# Whom: Alexey Dokuchaev <danfe@regency.nsu.ru>
+#
+# $FreeBSD$
+#
+
+PORTNAME= wmmemfree
+PORTVERSION= 0.7
+CATEGORIES= sysutils windowmaker
+MASTER_SITES= http://ibiblio.org/pub/linux/X11/xutils/ \
+ ftp://ftp.ibiblio.org/pub/linux/X11/xutils/
+
+MAINTAINER= danfe@regency.nsu.ru
+COMMENT= Memory and swap monitoring dockapp
+
+USE_BZIP2= yes
+USE_X_PREFIX= yes
+USE_XPM= yes
+
+MAN1= ${PORTNAME}.1
+
+post-patch:
+ @${CP} ${FILESDIR}/mem_freebsd.* ${WRKSRC}
+
+do-install:
+ @${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${PREFIX}/bin
+ @${CHMOD} g+s ${PREFIX}/bin/${PORTNAME}
+ @${CHOWN} root:kmem ${PREFIX}/bin/${PORTNAME}
+ @${INSTALL_MAN} ${WRKSRC}/${PORTNAME}.1 ${MANPREFIX}/man/man1
+
+.include <bsd.port.mk>
diff --git a/sysutils/wmmemfree/distinfo b/sysutils/wmmemfree/distinfo
new file mode 100644
index 000000000000..a7183441ae3d
--- /dev/null
+++ b/sysutils/wmmemfree/distinfo
@@ -0,0 +1 @@
+MD5 (wmmemfree-0.7.tar.bz2) = 6b478209d907dd2955828e71319af757
diff --git a/sysutils/wmmemfree/files/mem_freebsd.c b/sysutils/wmmemfree/files/mem_freebsd.c
new file mode 100644
index 000000000000..2198f0069ca8
--- /dev/null
+++ b/sysutils/wmmemfree/files/mem_freebsd.c
@@ -0,0 +1,125 @@
+/*
+ * mem_freebsd.c - get memory status
+ *
+ * Copyright (C) 2003 Alexey Dokuchaev <danfe@regency.nsu.ru>
+ * Parts are Copyright (C) 1993-2003 FreeBSD Project
+ *
+ * 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 Street #330, Boston, MA 02111-1307, USA.
+ */
+
+#include <sys/types.h>
+#include <sys/vmmeter.h>
+#include <fcntl.h>
+#include <kvm.h>
+#include <nlist.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "mem_freebsd.h"
+
+long long int mem_total, mem_used, mem_free, mem_buffers, mem_cached;
+long long int swp_total, swp_used, swp_free;
+
+static kvm_t *kd;
+struct nlist nlst[] = { {"_cnt"}, {"_bufspace"}, {0} };
+
+void
+mem_init(void)
+{
+ int pagesize;
+
+ if (!(kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")))
+ {
+ perror("kvm_open");
+ exit(1);
+ }
+
+ kvm_nlist(kd, nlst);
+
+ if (!nlst[0].n_type)
+ {
+ perror("kvm_nlist");
+ exit(1);
+ }
+
+ seteuid(getuid());
+ setegid(getgid());
+
+ if (geteuid() != getuid() || getegid() != getgid())
+ {
+ perror("sete?id");
+ exit(1);
+ }
+}
+
+void
+mem_getfree()
+{
+ struct vmmeter vm;
+ struct kvm_swap sw;
+ int bufspace = 0;
+ unsigned long cnt_offset;
+ unsigned long bufspace_offset;
+
+ static int firsttime = 1;
+ static int pagesin = -1;
+ static int pagesout = -1;
+ static time_t lasttime = 0;
+ time_t curtime;
+
+ if ((kvm_read(kd, nlst[0].n_value, &vm, sizeof(vm))
+ != sizeof(vm)) ||
+ (kvm_read(kd, nlst[1].n_value, &bufspace, sizeof(bufspace))
+ != sizeof(bufspace)))
+ {
+ perror("kvm_read");
+ exit(1);
+ }
+
+ mem_total = vm.v_page_count;
+ mem_free = vm.v_free_count;
+ mem_used = mem_total - mem_free;
+ mem_cached = vm.v_cache_count;
+ mem_buffers = bufspace / vm.v_page_size;
+
+ /*
+ * Only calculate when first time or when changes took place.
+ * Do not call it more than 1 time per 2 seconds; otherwise
+ * it can eat up to 50% of CPU time on heavy swap activity.
+ */
+
+ curtime = time(NULL);
+
+ if (firsttime ||
+ (((vm.v_swappgsin > pagesin) ||
+ (vm.v_swappgsout > pagesout))
+ && curtime > lasttime + 1))
+ {
+ if (kvm_getswapinfo(kd, &sw, 1, 0) >= 0 &&
+ sw.ksw_total)
+ {
+ swp_total = sw.ksw_total;
+ swp_used = sw.ksw_used;
+ swp_free = swp_total - swp_used;
+ }
+ firsttime = 0;
+ lasttime = curtime;
+ }
+ pagesin = vm.v_swappgsin;
+ pagesout = vm.v_swappgsout;
+}
diff --git a/sysutils/wmmemfree/files/mem_freebsd.h b/sysutils/wmmemfree/files/mem_freebsd.h
new file mode 100644
index 000000000000..d0f86dc328a5
--- /dev/null
+++ b/sysutils/wmmemfree/files/mem_freebsd.h
@@ -0,0 +1,32 @@
+/*
+ * mem_freebsd.h
+ *
+ * Copyright (C) 2003 Alexey Dokuchaev <danfe@regency.nsu.ru>
+ * Parts are Copyright (C) 1993-2003 FreeBSD Project
+ *
+ * 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 Street #330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __MEM_FREEBSD_H__
+#define __MEM_FREEBSD_H__
+
+extern long long int mem_total, mem_used;
+extern long long int mem_shared, mem_buffers, mem_cached;
+extern long long int swp_total, swp_used;
+
+void mem_init();
+void mem_getfree();
+
+#endif /* __MEM_FREEBSD_H__ */
diff --git a/sysutils/wmmemfree/files/patch-Makefile b/sysutils/wmmemfree/files/patch-Makefile
new file mode 100644
index 000000000000..4587a4b54ed8
--- /dev/null
+++ b/sysutils/wmmemfree/files/patch-Makefile
@@ -0,0 +1,54 @@
+--- Makefile.orig Sat Mar 22 02:59:07 2003
++++ Makefile Fri Apr 11 12:50:48 2003
+@@ -1,38 +1,17 @@
+-#Makefile
++CC ?= cc
++LDIR = -L${X11BASE}/lib
++IDIR = -I${X11BASE}/include
+
+-PROG=wmmemfree
+-OBJS=dockapp.o draw.o mem_linux.o options.o wmmemfree.o
++LIBS = -lX11 -lXpm -lXext -lkvm
+
+-PREFIX=/usr/local
+-BINDIR=$(PREFIX)/bin
+-MANUALDIR=$(PREFIX)/share/man/man1
+-CC=gcc
+-STRIP=strip
+-FLAGS=-Wall -O2
+-RM=rm -f
+-INST=install
+-MANUAL=$(PROG).1
+-LIBS=-L/usr/X11R6/lib -lX11 -lXext -lXpm
++OBJS = dockapp.o\
++ draw.o\
++ mem_freebsd.o\
++ options.o\
++ wmmemfree.o
+
+-all: $(PROG)
++.c.o:
++ ${CC} ${CFLAGS} ${IDIR} ${DEFS} -c $< -o $*.o
+
+-$(PROG): $(OBJS)
+- $(CC) -o $(PROG) $(OBJS) $(LIBS)
+- $(STRIP) $(PROG)
+-%.o: %.c
+- $(CC) $(FLAGS) -c $< -o $@
+-clean:
+- $(RM) $(OBJS) $(PROG)
+-install: $(PROG)
+- $(INST) -m 755 $(PROG) $(BINDIR)
+- $(INST) -m 644 $(MANUAL) $(MANUALDIR)
+-uninstall:
+- $(RM) $(BINDIR)/$(PROG)
+- $(RM) $(MANUALDIR)/$(MANUAL)
+-
+-dockapp.o: dockapp.c wmmemfree.h options.h draw.h xpm/bg.xpm xpm/on.xpm \
+- xpm/off.xpm xpm/numbers.xpm xpm/panel.xpm
+-draw.o: draw.c dockapp.h draw.h mem_linux.h options.h
+-mem_linux.o: mem_linux.c
+-options.o: options.c wmmemfree.h options.h
+-wmmemfree.o: wmmemfree.c wmmemfree.h dockapp.h draw.h options.h
++all: ${OBJS}
++ ${CC} ${CFLAGS} -o wmmemfree ${OBJS} ${LDIR} ${LIBS}
diff --git a/sysutils/wmmemfree/files/patch-draw.c b/sysutils/wmmemfree/files/patch-draw.c
new file mode 100644
index 000000000000..1e107ac48a6e
--- /dev/null
+++ b/sysutils/wmmemfree/files/patch-draw.c
@@ -0,0 +1,11 @@
+--- draw.c.orig Fri Apr 11 12:47:47 2003
++++ draw.c Fri Apr 11 12:47:54 2003
+@@ -24,7 +24,7 @@
+
+ #include "dockapp.h"
+ #include "draw.h"
+-#include "mem_linux.h"
++#include "mem_freebsd.h"
+ #include "options.h"
+
+ void draw_window()
diff --git a/sysutils/wmmemfree/files/patch-wmmemfree.c b/sysutils/wmmemfree/files/patch-wmmemfree.c
new file mode 100644
index 000000000000..62f224511132
--- /dev/null
+++ b/sysutils/wmmemfree/files/patch-wmmemfree.c
@@ -0,0 +1,16 @@
+--- wmmemfree.c.orig Fri Apr 11 12:48:52 2003
++++ wmmemfree.c Fri Apr 11 12:50:05 2003
+@@ -43,10 +43,11 @@
+ {
+ struct itimerval tv;
+
++ mem_init();
+ tv.it_value.tv_sec = 2; /* give 2 seconds for safety */
+ tv.it_value.tv_usec = 0;
+- tv.it_interval.tv_sec = 0;
+- tv.it_interval.tv_usec = opt_milisecs * 1000;
++ tv.it_interval.tv_sec = opt_milisecs / 1000;
++ tv.it_interval.tv_usec = (opt_milisecs % 1000) * 1000;
+ signal(SIGALRM, handle_timer);
+ setitimer(ITIMER_REAL, &tv, NULL);
+ }
diff --git a/sysutils/wmmemfree/pkg-descr b/sysutils/wmmemfree/pkg-descr
new file mode 100644
index 000000000000..5f6845e03aaa
--- /dev/null
+++ b/sysutils/wmmemfree/pkg-descr
@@ -0,0 +1,4 @@
+WMMemFree shows system memory usage. It runs as a dockapp for window
+manager like WindowMaker or some other which supports dockapps. On
+the top side you have your physical memory usage and on the bottom there
+is your swap space usage.
diff --git a/sysutils/wmmemfree/pkg-plist b/sysutils/wmmemfree/pkg-plist
new file mode 100644
index 000000000000..fa26e7cd78aa
--- /dev/null
+++ b/sysutils/wmmemfree/pkg-plist
@@ -0,0 +1 @@
+bin/wmmemfree