--- src/aapm.cc.orig	Tue Oct  9 23:54:03 2001
+++ src/aapm.cc	Tue Feb 19 14:39:19 2002
@@ -23,6 +23,13 @@
 #include <string.h>
 #include <stdio.h>
 
+#ifdef __FreeBSD__
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <machine/apm_bios.h>
+#endif
+
 #ifdef CONFIG_APPLET_APM
 
 YColor *YApm::apmBg = 0;
@@ -32,8 +39,12 @@
 extern YPixmap *taskbackPixmap;
 
 void ApmStr(char *s, bool Tool) {
+#ifdef __FreeBSD__
+    struct apm_info ai;
+#else
     char buf[45];
-    int len, i, fd = open("/proc/apm", O_RDONLY);
+#endif
+    int len, i, fd = open(APMDEV, O_RDONLY);
     char driver[16];
     char apmver[16];
     int apmflags;
@@ -45,9 +56,27 @@
     char units[16];
 
     if (fd == -1) {
+        static int error = 0;
+        if (!error)
+            perror("Can't open the apm device");
+        error = 1;
         return ;
     }
-
+#ifdef __FreeBSD__
+    if (ioctl(fd,APMIO_GETINFO, &ai) == -1)
+    {
+        static int error = 0;
+        if (!error)
+            perror("Can't ioctl the apm device");
+        error = 1;
+        close(fd);
+        return;
+    }
+    close(fd);
+    BATlife = ai.ai_batt_life;
+    ACstatus = ai.ai_acline ;
+    BATflag = ai.ai_batt_stat == 3 ? 8 : 0;
+#else
     len = read(fd, buf, sizeof(buf) - 1);
     close(fd);
 
@@ -61,10 +90,11 @@
         static int error = 1;
         if (error) {
             error = 0;
-            warn(_("/proc/apm - unknown format (%d)"), i);
+            warn(_("%s - unknown format (%d)"), APMDEV, i);
         }
         return ;
     }
+#endif
     if (BATlife == -1)
         BATlife = 0;
 
