Index: usr.bin/top/display.h
===================================================================
--- usr.bin/top/display.h
+++ usr.bin/top/display.h
@@ -14,6 +14,7 @@
 void	 display_header(int t);
 int		 display_init(struct statics *statics);
 void	 i_arc(int *stats);
+void	 i_battery(int nbat, int batt);
 void	 i_carc(int *stats);
 void	 i_cpustates(int *states);
 void	 i_loadave(int mpid, double *avenrun);
Index: usr.bin/top/display.c
===================================================================
--- usr.bin/top/display.c
+++ usr.bin/top/display.c
@@ -1322,6 +1322,15 @@
     }
 }
 
+void
+i_battery(int nbat, int batt)
+{
+
+	if (nbat > 0) {
+		printf("; battery: %d%%", batt);
+	}
+}
+
 #define SETUPBUFFER_MIN_SCREENWIDTH 80
 #define SETUPBUFFER_REQUIRED_ADDBUFSIZ 2
 
Index: usr.bin/top/machine.h
===================================================================
--- usr.bin/top/machine.h
+++ usr.bin/top/machine.h
@@ -30,6 +30,7 @@
     const char * const *carc_names;
     const char * const *swap_names;
     const char * const *order_names;
+    int nbatteries;
     int ncpus;
 };
 
@@ -50,6 +51,7 @@
     int    *carc;
     int    *swap;
     struct timeval boottime;
+    int    battery;
     int    ncpus;
 };
 
Index: usr.bin/top/machine.c
===================================================================
--- usr.bin/top/machine.c
+++ usr.bin/top/machine.c
@@ -211,6 +211,10 @@
 static long *pcpu_cp_diff;
 static int *pcpu_cpu_states;
 
+/* Battery units and states */
+static int battery_units;
+static int battery_life;
+
 static int compare_swap(const void *a, const void *b);
 static int compare_jid(const void *a, const void *b);
 static int compare_pid(const void *a, const void *b);
@@ -373,6 +377,12 @@
 	pcpu_cpu_states = calloc(ncpus * CPUSTATES, sizeof(int));
 	statics->ncpus = ncpus;
 
+	/* Allocate state of battery units. */
+	battery_units = 0;
+	size = sizeof(int);
+	sysctlbyname("hw.acpi.battery.units", &battery_units, &size, NULL, 0);
+	statics->nbatteries = battery_units;
+
 	update_layout();
 
 	/* all done! */
@@ -579,6 +589,12 @@
 	} else {
 		si->boottime.tv_sec = -1;
 	}
+
+	battery_life = 0;
+	if (battery_units > 0) {
+		GETSYSCTL("hw.acpi.battery.life", battery_life);
+	}
+	si->battery = battery_life;
 }
 
 #define NOPROC	((void *)-1)
Index: usr.bin/top/top.c
===================================================================
--- usr.bin/top/top.c
+++ usr.bin/top/top.c
@@ -619,6 +619,9 @@
 	(*d_loadave)(system_info.last_pid,
 		     system_info.load_avg);
 
+	/* display the battery info (if any) */
+	i_battery(statics.nbatteries, system_info.battery);
+
 	/* display the current time */
 	/* this method of getting the time SHOULD be fairly portable */
 	time(&curr_time);