--- src/aapm.cc.orig	Sat Jan  4 01:25:45 2003
+++ src/aapm.cc	Mon Jan  6 19:00:50 2003
@@ -26,6 +26,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
+
 YColor *YApm::apmBg = 0;
 YColor *YApm::apmFg = 0;
 YFont *YApm::apmFont = 0;
@@ -47,8 +54,12 @@
 
 
 void ApmStr(char *s, bool Tool) {
+#ifdef __FreeBSD__
+    struct apm_info ai;
+#else
     char buf[80];
-    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;
@@ -60,9 +71,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);
 
@@ -76,10 +105,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;
 
