bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

battery.el patch


From: Ralph Schleicher
Subject: battery.el patch
Date: 14 Sep 2004 22:33:09 +0200
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3

Hi,

please find attached a patch against battery.el version 1.20 from Emacs
CVS together with a ChangeLog entry.  The patch provides some source
code cleanups and a fail-save solution for "non-standard" battery
subdirectory names for the ACPI driver of the Linux kernel.  The later
turned out to be a hardware issue because the battery subdirectory names
are not choosen by the ACPI driver.  Instead, the ACPI driver uses the
battery name as provided by the hardware.


2004-09-13  Ralph Schleicher  <rs@nunatak.allgaeu.org>

        * battery.el: Delete superfluous empty lines.
        Change single back-quotes into single quotes in all comments.
        (battery-linux-proc-acpi): Attempt to gather information from
        all battery subdirectories regardless of their file name.
        (battery-linux-proc-apm): Replace all occurrences of
        battery-hex-to-int-2 with string-to-int (base 16).
        (battery-hex-to-int-2): Delete function.
        (battery-hex-to-int): Delete function.
        (battery-hex-map): Delete variable.


--- battery.el~ 2004-08-09 21:49:21.000000000 +0200
+++ battery.el  2004-09-13 21:55:45.000000000 +0200
@@ -24,8 +24,8 @@
 
 ;;; Commentary:
 
-;; There is at present support for interpreting the new `/proc/apm'
-;; file format of Linux version 1.3.58 or newer and for the `/proc/acpi/'
+;; There is at present support for interpreting the new '/proc/apm'
+;; file format of Linux version 1.3.58 or newer and for the '/proc/acpi/'
 ;; directory structure of Linux 2.4.20 and 2.6.
 
 ;;; Code:
@@ -33,7 +33,6 @@
 (require 'timer)
 
 
-
 (defgroup battery nil
   "Display battery status information."
   :prefix "battery-"
@@ -137,7 +136,7 @@
   (force-mode-line-update))
 
 
-;;; `/proc/apm' interface for Linux.
+;;; '/proc/apm' interface for Linux.
 
 (defconst battery-linux-proc-apm-regexp
   (concat "^\\([^ ]+\\)"               ; Driver version.
@@ -182,20 +181,20 @@
          (re-search-forward battery-linux-proc-apm-regexp)
          (setq driver-version (match-string 1))
          (setq bios-version (match-string 2))
-         (setq tem (battery-hex-to-int-2 (match-string 3)))
+         (setq tem (string-to-int (match-string 3) 16))
          (if (not (logand tem 2))
              (setq bios-interface "not supported")
            (setq bios-interface "enabled")
            (cond ((logand tem 16) (setq bios-interface "disabled"))
                  ((logand tem 32) (setq bios-interface "disengaged")))
-           (setq tem (battery-hex-to-int-2 (match-string 4)))
+           (setq tem (string-to-int (match-string 4) 16))
            (cond ((= tem 0) (setq line-status "off-line"))
                  ((= tem 1) (setq line-status "on-line"))
                  ((= tem 2) (setq line-status "on backup")))
-           (setq tem (battery-hex-to-int-2 (match-string 6)))
+           (setq tem (string-to-int (match-string 6) 16))
            (if (= tem 255)
                (setq battery-status "N/A")
-             (setq tem (battery-hex-to-int-2 (match-string 5)))
+             (setq tem (string-to-int (match-string 5) 16))
              (cond ((= tem 0) (setq battery-status "high"
                                     battery-status-symbol ""))
                    ((= tem 1) (setq battery-status "low"
@@ -225,7 +224,7 @@
          (cons ?t (or remaining-time "N/A")))))
 
 
-;;; `/proc/acpi/' interface for Linux.
+;;; '/proc/acpi/' interface for Linux.
 
 (defun battery-linux-proc-acpi ()
   "Get ACPI status information from Linux kernel.
@@ -245,52 +244,62 @@
 %t Remaining time in the form `h:min'"
   (let (capacity design-capacity rate rate-type charging-state warn low
                 minutes hours)
-    (when (file-directory-p "/proc/acpi/battery/")
-      ;; ACPI provides information about each battery present in the system in
-      ;; a separate subdirectory.  We are going to merge the available
-      ;; information together since displaying for a variable amount of
-      ;; batteries seems overkill for format-strings.
-      (mapc
-       (lambda (dir)
-        (with-temp-buffer
-          (insert-file-contents (expand-file-name "state" dir))
-          (when (re-search-forward "present: +yes$" nil t)
-            (and (re-search-forward "charging state: +\\(.*\\)$" nil t)
-                 (or (null charging-state) (string= charging-state
-                                                    "unknown"))
-                 ;; On most multi-battery systems, most of the time only one
-                 ;; battery is "charging"/"discharging", the others are
-                 ;; "unknown".
-                 (setq charging-state (match-string 1)))
-            (when (re-search-forward "present rate: +\\([0-9]+\\) \\(m[AW]\\)$"
-                                     nil t)
-              (setq rate (+ (or rate 0) (string-to-int (match-string 1)))
-                    rate-type (or (and rate-type
-                                       (if (string= rate-type (match-string 2))
-                                           rate-type
-                                         (error
-                                          "Inconsistent rate types (%s vs. %s)"
-                                          rate-type (match-string 2))))
-                                  (match-string 2))))
-            (when (re-search-forward "remaining capacity: +\\([0-9]+\\) 
m[AW]h$"
-                                     nil t)
-              (setq capacity
-                    (+ (or capacity 0) (string-to-int (match-string 1))))))
-          (goto-char (point-max))
-          (insert-file-contents (expand-file-name "info" dir))
-          (when (re-search-forward "present: +yes$" nil t)
-            (when (re-search-forward "design capacity: +\\([0-9]+\\) m[AW]h$"
-                                     nil t)
-              (setq design-capacity (+ (or design-capacity 0)
-                                       (string-to-int (match-string 1)))))
-            (when (re-search-forward "design capacity warning: +\\([0-9]+\\) 
m[AW]h$"
-                                     nil t)
-              (setq warn (+ (or warn 0) (string-to-int (match-string 1)))))
-            (when (re-search-forward "design capacity low: +\\([0-9]+\\) 
m[AW]h$"
-                                     nil t)
-              (setq low (+ (or low 0)
-                           (string-to-int (match-string 1))))))))
-       (directory-files "/proc/acpi/battery/" t "\\(BAT\\|CMB\\)")))
+    ;; ACPI provides information about each battery present in the system
+    ;; in a separate subdirectory.  We are going to merge the available
+    ;; information together since displaying for a variable amount of
+    ;; batteries seems overkill for format-strings.
+    (with-temp-buffer
+      (mapc (lambda (dir)
+             (if (string-match "/\\.\\.?\\'" dir)
+                 nil
+               (delete-region (point-min) (point-max))
+               (condition-case nil
+                   (insert-file-contents (expand-file-name "state" dir))
+                 (error nil))
+               (when (re-search-forward "present: +yes$" nil t)
+                 (and (re-search-forward
+                       "charging state: +\\(.*\\)$" nil t)
+                      (or (null charging-state)
+                          (string= charging-state "unknown"))
+                      ;; On most multi-battery systems, most of the time
+                      ;; only one battery is "charging/discharging", the
+                      ;; others are "unknown".
+                      (setq charging-state (match-string 1)))
+                 (when (re-search-forward
+                        "present rate: +\\([0-9]+\\) \\(m[AW]\\)$" nil t)
+                   (setq rate (+ (or rate 0)
+                                 (string-to-int (match-string 1)))
+                         rate-type (or (and rate-type
+                                            (if (string= rate-type 
(match-string 2))
+                                                rate-type
+                                              (error
+                                               "Inconsistent rate types (%s 
vs. %s)"
+                                               rate-type (match-string 2))))
+                                       (match-string 2))))
+                 (when (re-search-forward
+                        "remaining capacity: +\\([0-9]+\\) m[AW]h$" nil t)
+                   (setq capacity (+ (or capacity 0)
+                                     (string-to-int (match-string 1))))))
+               (goto-char (point-max))
+               (condition-case nil
+                   (insert-file-contents (expand-file-name "info" dir))
+                 (error nil))
+               (when (re-search-forward "present: +yes$" nil t)
+                 (when (re-search-forward
+                        "design capacity: +\\([0-9]+\\) m[AW]h$" nil t)
+                   (setq design-capacity (+ (or design-capacity 0)
+                                            (string-to-int (match-string 1)))))
+                 (when (re-search-forward
+                        "design capacity warning: +\\([0-9]+\\) m[AW]h$" nil t)
+                   (setq warn (+ (or warn 0)
+                                 (string-to-int (match-string 1)))))
+                 (when (re-search-forward
+                        "design capacity low: +\\([0-9]+\\) m[AW]h$" nil t)
+                   (setq low (+ (or low 0)
+                                (string-to-int (match-string 1))))))))
+           (condition-case nil
+               (directory-files "/proc/acpi/battery/" t)
+             (error nil))))
     (and capacity rate
         (setq minutes (if (zerop rate) 0
                         (floor (* (/ (float (if (string= charging-state
@@ -366,32 +375,6 @@
        (setq result (concat result "%")))
     result))
 
-(defconst battery-hex-map '((?0 .  0) (?1 .  1) (?2 .  2) (?3 .  3)
-                           (?4 .  4) (?5 .  5) (?6 .  6) (?7 .  7)
-                           (?8 .  8) (?9 .  9) (?a . 10) (?b . 11)
-                           (?c . 12) (?d . 13) (?e . 14) (?f . 15)))
-
-(defun battery-hex-to-int (string)
-  "Convert a hexadecimal number (a string) into a number."
-  (save-match-data
-    (and (string-match "^[ \t]+" string)
-        (setq string (substring string (match-end 0))))
-    (and (string-match "^0[xX]" string)
-        (setq string (substring string (match-end 0)))))
-  (battery-hex-to-int-2 string))
-
-(defun battery-hex-to-int-2 (string)
-  (let ((index 0)
-       (length (length string))
-       (value 0)
-       (elem nil))
-    (while (and (< index length)
-               (setq elem (assoc (downcase (aref string index))
-                                 battery-hex-map)))
-      (setq value (+ (* 16 value) (cdr elem))
-           index (1+ index)))
-    value))
-
 
 (provide 'battery)
 

-- 
Ralph




reply via email to

[Prev in Thread] Current Thread [Next in Thread]