diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/w32fns.c | 110 |
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 @@ | |||
| 1 | 2008-04-29 Jason Rumney <jasonr@gnu.org> | ||
| 2 | |||
| 3 | * w32fns.c (Fw32_battery_status): New defun. | ||
| 4 | (syms_of_w32fns): Defsubr it. | ||
| 5 | |||
| 1 | 2008-04-28 Andreas Schwab <schwab@suse.de> | 6 | 2008-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 | ||
| 8683 | DEFUN ("w32-battery-status", Fw32_battery_status, Sw32_battery_status, 0, 0, 0, | ||
| 8684 | doc: /* Get power status information from Windows system. | ||
| 8685 | |||
| 8686 | The 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 | ||
| 8685 | DEFUN ("file-system-info", Ffile_system_info, Sfile_system_info, 1, 1, 0, | 8794 | DEFUN ("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); |