diff -Naur wmapm-3.1/wmapm/Makefile wmapm-3.1.netbsd/wmapm/Makefile --- wmapm-3.1/wmapm/Makefile 2000-01-11 17:42:25.000000000 +0100 +++ wmapm-3.1.netbsd/wmapm/Makefile 2007-07-03 04:20:10.000000000 +0200 @@ -1,20 +1,20 @@ CC = gcc -CFLAGS = -O2 -Wall -INCDIR = -I/usr/X11R6/include -DESTDIR= /usr/X11R6 -LIBDIR = -L/usr/X11R6/lib +CFLAGS = -g -O2 -W -Wall +INCDIR = -I/usr/pkg/include +DESTDIR= /usr/local +LIBDIR = -L/usr/pkg/lib -Wl,-rpath,/usr/pkg/lib LIBS = -lXpm -lX11 -lXext OBJS = wmapm.o \ ../wmgeneral/wmgeneral.o .c.o: - $(CC) $(COPTS) -D$(shell echo `uname -s`) -c $< -o $*.o $(INCDIR) + $(CC) $(COPTS) -D NetBSD -c $< -o $*.o $(INCDIR) all: wmapm.o wmapm wmapm.o: wmapm_master.xpm wmapm_mask.xbm wmapm.h wmapm: $(OBJS) - $(CC) $(COPTS) $(SYSTEM) -o wmapm $^ $(INCDIR) $(LIBDIR) $(LIBS) + $(CC) $(COPTS) $(SYSTEM) -o wmapm $(OBJS) $(INCDIR) $(LIBDIR) $(LIBS) clean: for i in $(OBJS) ; do \ @@ -22,8 +22,8 @@ done rm -f wmapm -install:: wmapm +install: wmapm install -s -m 0755 wmapm $(DESTDIR)/bin - install -m 0644 wmapm.1 $(DESTDIR)/man/man1 - chmod +s $(DESTDIR)/bin/wmapm +# install -m 0644 wmapm.1 $(DESTDIR)/share/man/man1 +# chmod +s $(DESTDIR)/bin/wmapm diff -Naur wmapm-3.1/wmapm/wmapm.c wmapm-3.1.netbsd/wmapm/wmapm.c --- wmapm-3.1/wmapm/wmapm.c 2000-01-11 17:37:25.000000000 +0100 +++ wmapm-3.1.netbsd/wmapm/wmapm.c 2007-07-19 14:34:38.000000000 +0200 @@ -157,6 +157,13 @@ #include #include #endif +#ifdef NetBSD +# include +# include +# include +# include +# include +#endif #include #include #include @@ -177,6 +184,9 @@ # ifdef FreeBSD int apm_read(apm_info_t temp_info); # endif +#ifdef NetBSD +int apm_read(struct my_apm_info * i); +#endif #endif int apm_exists(); void ParseCMDLine(int argc, char *argv[]); @@ -301,16 +311,20 @@ */ if (n>nMax){ + int ret = 0; n = 0; #if defined(Linux) || defined(SunOS) - if (apm_read(&my_cur_info)) { + if ((ret = apm_read(&my_cur_info))) { #else # ifdef FreeBSD - if (apm_read(&temp_info)) { + if ((ret = apm_read(&temp_info))) { +# endif +# ifdef NetBSD + if ((ret = apm_read(&my_cur_info))) { # endif #endif - fprintf(stderr, "Cannot read APM information: %i\n"); + fprintf(stderr, "Cannot read APM information: %i\n", ret); exit(1); } @@ -403,6 +417,9 @@ # ifdef FreeBSD if (my_cur_info.battery_time >= 86400) { # endif +# ifdef NetBSD + if (my_cur_info.battery_time >= 86400) { +# endif #endif /* @@ -421,6 +438,9 @@ #ifdef FreeBSD time_left = (my_cur_info.using_minutes) ? my_cur_info.battery_time / 60 : my_cur_info.battery_time / 3600; #endif +#ifdef NetBSD + time_left = (my_cur_info.using_minutes) ? my_cur_info.battery_time / 60 : my_cur_info.battery_time / 3600; +#endif hour_left = time_left / 60; min_left = time_left % 60; @@ -861,6 +881,89 @@ } # endif +# ifdef NetBSD +static int _read_error(char const * message, int ret) +{ + fputs("wmapm: ", stderr); + perror(message); + return ret; +} + +static int _read_data(int fd, int sensor, envsys_tre_data_t * data) +{ + memset(data, 0, sizeof(*data)); + data->sensor = sensor; + if(ioctl(fd, ENVSYS_GTREDATA, data) == -1) + return _read_error("ENVSYS_GTREDATA", 1); + return !(data->validflags & ENVSYS_FVALID); +} + +int apm_read(struct my_apm_info * i) +{ + static int fd = -1; + int j; + envsys_basic_info_t info; + envsys_tre_data_t data; + unsigned int rate = 0; + unsigned int charge = 0; + unsigned int maxcharge = 0; + + if(fd < 0 && (fd = open(APMDEV, O_RDONLY)) < 0) + return _read_error(APMDEV, 1); + i->battery_status = 0; + for(j = 0; j >= 0; j++) + { + memset(&info, 0, sizeof(info)); + info.sensor = j; + if(ioctl(fd, ENVSYS_GTREINFO, &info) == -1) + { + close(fd); + fd = -1; + return _read_error("ENVSYS_GTREINFO", 1); + } + if(!(info.validflags & ENVSYS_FVALID)) + break; + if(strcmp("acpiacad0 connected", info.desc) == 0 + && _read_data(fd, j, &data) == 0 + && data.validflags & ENVSYS_FCURVALID) + { + i->ac_line_status = data.cur.data_us; + continue; + } + if(strncmp("acpibat", info.desc, 7) != 0 + || info.desc[7] == '\0') + continue; + if(strcmp(" charge", &info.desc[8]) == 0 + && _read_data(fd, j, &data) == 0 + && data.validflags & ENVSYS_FCURVALID + && data.validflags & ENVSYS_FMAXVALID) + { + charge += data.cur.data_us; + maxcharge += data.max.data_us; + } + else if(strcmp(" charge rate", &info.desc[8]) == 0 + && _read_data(fd, j, &data) == 0 + && data.validflags & ENVSYS_FCURVALID) + rate += data.cur.data_us; + else if(strcmp(" charging", &info.desc[8]) == 0 + && _read_data(fd, j, &data) == 0 + && data.validflags & ENVSYS_FCURVALID + && data.cur.data_us > 0) + i->battery_status = 3; /* XXX per battery */ + else if(strcmp(" discharge rate", &info.desc[8]) == 0 + && _read_data(fd, j, &data) == 0 + && data.validflags & ENVSYS_FCURVALID) + rate += data.cur.data_us; + } + i->battery_percentage = (charge * 100.0) / maxcharge; + if(i->battery_status != 0) + i->battery_time = rate != 0 ? (maxcharge - charge) * 3600.0 / rate : -1; + else + i->battery_time = rate != 0 ? charge * 3600.0 / rate : -1; + i->using_minutes = 1; + return 0; +} +# endif #endif #ifdef SunOS diff -Naur wmapm-3.1/wmapm/wmapm.h wmapm-3.1.netbsd/wmapm/wmapm.h --- wmapm-3.1/wmapm/wmapm.h 2000-01-11 16:53:43.000000000 +0100 +++ wmapm-3.1.netbsd/wmapm/wmapm.h 2007-07-03 04:19:28.000000000 +0200 @@ -33,6 +33,9 @@ # ifdef Linux # define APMDEV "/proc/apm" # endif +# ifdef NetBSD +# define APMDEV _PATH_SYSMON +# endif #endif typedef struct my_apm_info { diff -Naur wmapm-3.1/wmapm/wmapm_master.xpm wmapm-3.1.netbsd/wmapm/wmapm_master.xpm --- wmapm-3.1/wmapm/wmapm_master.xpm 1998-12-15 16:50:10.000000000 +0100 +++ wmapm-3.1.netbsd/wmapm/wmapm_master.xpm 2007-07-03 04:19:28.000000000 +0200 @@ -8,8 +8,8 @@ "a c #3c0000", "b c #4c3c00", "c c #282828", -"d c #00445a", -"e c #006b8e", +"d c #004941", +"e c #188a86", "f c #590000", "g c #48484a", "h c #0000ff", @@ -19,7 +19,7 @@ "l c #3fff00", "m c #5fff00", "n c #7fff00", -"o c #00b0ea", +"o c #00c9c1", "p c #e90000", "q c #ff0000", "r c #ff2600",