aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/w32fns.c110
2 files changed, 115 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 28cf208dc44..74708b5e692 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12008-04-29 Jason Rumney <jasonr@gnu.org>
2
3 * w32fns.c (Fw32_battery_status): New defun.
4 (syms_of_w32fns): Defsubr it.
5
12008-04-28 Andreas Schwab <schwab@suse.de> 62008-04-28 Andreas Schwab <schwab@suse.de>
2 7
3 * dired.c (file_name_completion): Fix another mixing of encoded 8 * dired.c (file_name_completion): Fix another mixing of encoded
diff --git a/src/w32fns.c b/src/w32fns.c
index 9e42335472e..7350bbe928c 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -8680,6 +8680,115 @@ Lisp_Object class, name;
8680 return Qt; 8680 return Qt;
8681} 8681}
8682 8682
8683DEFUN ("w32-battery-status", Fw32_battery_status, Sw32_battery_status, 0, 0, 0,
8684 doc: /* Get power status information from Windows system.
8685
8686The following %-sequences are provided:
8687%L AC line status (verbose)
8688%B Battery status (verbose)
8689%b Battery status, empty means high, `-' means low,
8690 `!' means critical, and `+' means charging
8691%p Battery load percentage
8692%s Remaining time (to charge or discharge) in seconds
8693%m Remaining time (to charge or discharge) in minutes
8694%h Remaining time (to charge or discharge) in hours
8695%t Remaining time (to charge or discharge) in the form `h:min' */)
8696 ()
8697{
8698 Lisp_Object status = Qnil;
8699
8700 SYSTEM_POWER_STATUS system_status;
8701 if (GetSystemPowerStatus (&system_status))
8702 {
8703 Lisp_Object line_status, battery_status, battery_status_symbol;
8704 Lisp_Object load_percentage, seconds, minutes, hours, remain;
8705 Lisp_Object sequences[8];
8706
8707 long seconds_left = (long) system_status.BatteryLifeTime;
8708
8709 if (system_status.ACLineStatus == 0)
8710 line_status = build_string ("off-line");
8711 else if (system_status.ACLineStatus == 1)
8712 line_status = build_string ("on-line");
8713 else
8714 line_status = build_string ("N/A");
8715
8716 if (system_status.BatteryFlag & 128)
8717 {
8718 battery_status = build_string ("N/A");
8719 battery_status_symbol = build_string ("");
8720 }
8721 else if (system_status.BatteryFlag & 8)
8722 {
8723 battery_status = build_string ("charging");
8724 battery_status_symbol = build_string ("+");
8725 if (system_status.BatteryFullLifeTime != -1L)
8726 seconds_left = system_status.BatteryFullLifeTime - seconds_left;
8727 }
8728 else if (system_status.BatteryFlag & 4)
8729 {
8730 battery_status = build_string ("critical");
8731 battery_status_symbol = build_string ("!");
8732 }
8733 else if (system_status.BatteryFlag & 2)
8734 {
8735 battery_status = build_string ("low");
8736 battery_status_symbol = build_string ("-");
8737 }
8738 else if (system_status.BatteryFlag & 1)
8739 {
8740 battery_status = build_string ("high");
8741 battery_status_symbol = build_string ("");
8742 }
8743 else
8744 {
8745 battery_status = build_string ("medium");
8746 battery_status_symbol = build_string ("");
8747 }
8748
8749 if (system_status.BatteryLifePercent > 100)
8750 load_percentage = build_string ("N/A");
8751 else
8752 {
8753 char buffer[16];
8754 _snprintf (buffer, 16, "%d", system_status.BatteryLifePercent);
8755 load_percentage = build_string (buffer);
8756 }
8757
8758 if (seconds_left < 0)
8759 seconds = minutes = hours = remain = build_string ("N/A");
8760 else
8761 {
8762 long m;
8763 float h;
8764 char buffer[16];
8765 _snprintf (buffer, 16, "%ld", seconds_left);
8766 seconds = build_string (buffer);
8767
8768 m = seconds_left / 60;
8769 _snprintf (buffer, 16, "%d", m);
8770 minutes = build_string (buffer);
8771
8772 h = seconds_left / 3600.0;
8773 _snprintf (buffer, 16, "%3.1f", h);
8774 hours = build_string (buffer);
8775
8776 _snprintf (buffer, 16, "%1.0f:%d", h, m);
8777 remain = build_string (buffer);
8778 }
8779 sequences[0] = Fcons (make_number ('L'), line_status);
8780 sequences[1] = Fcons (make_number ('B'), battery_status);
8781 sequences[2] = Fcons (make_number ('b'), battery_status_symbol);
8782 sequences[3] = Fcons (make_number ('p'), load_percentage);
8783 sequences[4] = Fcons (make_number ('s'), seconds);
8784 sequences[5] = Fcons (make_number ('m'), minutes);
8785 sequences[6] = Fcons (make_number ('h'), hours);
8786 sequences[7] = Fcons (make_number ('t'), remain);
8787
8788 status = Flist (8, sequences);
8789 }
8790 return status;
8791}
8683 8792
8684 8793
8685DEFUN ("file-system-info", Ffile_system_info, Sfile_system_info, 1, 1, 0, 8794DEFUN ("file-system-info", Ffile_system_info, Sfile_system_info, 1, 1, 0,
@@ -9287,6 +9396,7 @@ versions of Windows) characters. */);
9287 defsubr (&Sw32_toggle_lock_key); 9396 defsubr (&Sw32_toggle_lock_key);
9288 defsubr (&Sw32_window_exists_p); 9397 defsubr (&Sw32_window_exists_p);
9289 defsubr (&Sw32_find_bdf_fonts); 9398 defsubr (&Sw32_find_bdf_fonts);
9399 defsubr (&Sw32_battery_status);
9290 9400
9291 defsubr (&Sfile_system_info); 9401 defsubr (&Sfile_system_info);
9292 defsubr (&Sdefault_printer_name); 9402 defsubr (&Sdefault_printer_name);