wmbattery: Add to repository.
Version 2.44. Source obtained from: http://ftp.de.debian.org/debian/pool/main/w/wmbattery/wmbattery_2.44.tar.gz
This commit is contained in:
		
							parent
							
								
									0e0d4944ac
								
							
						
					
					
						commit
						51380525e7
					
				
					 44 changed files with 3811 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								wmbattery/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								wmbattery/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					debian/changelog merge=dpkg-mergechangelogs
 | 
				
			||||||
							
								
								
									
										340
									
								
								wmbattery/GPL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										340
									
								
								wmbattery/GPL
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,340 @@
 | 
				
			||||||
 | 
							    GNU GENERAL PUBLIC LICENSE
 | 
				
			||||||
 | 
							       Version 2, June 1991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
				
			||||||
 | 
						51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 | 
					 Everyone is permitted to copy and distribute verbatim copies
 | 
				
			||||||
 | 
					 of this license document, but changing it is not allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								    Preamble
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The licenses for most software are designed to take away your
 | 
				
			||||||
 | 
					freedom to share and change it.  By contrast, the GNU General Public
 | 
				
			||||||
 | 
					License is intended to guarantee your freedom to share and change free
 | 
				
			||||||
 | 
					software--to make sure the software is free for all its users.  This
 | 
				
			||||||
 | 
					General Public License applies to most of the Free Software
 | 
				
			||||||
 | 
					Foundation's software and to any other program whose authors commit to
 | 
				
			||||||
 | 
					using it.  (Some other Free Software Foundation software is covered by
 | 
				
			||||||
 | 
					the GNU Library General Public License instead.)  You can apply it to
 | 
				
			||||||
 | 
					your programs, too.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  When we speak of free software, we are referring to freedom, not
 | 
				
			||||||
 | 
					price.  Our General Public Licenses are designed to make sure that you
 | 
				
			||||||
 | 
					have the freedom to distribute copies of free software (and charge for
 | 
				
			||||||
 | 
					this service if you wish), that you receive source code or can get it
 | 
				
			||||||
 | 
					if you want it, that you can change the software or use pieces of it
 | 
				
			||||||
 | 
					in new free programs; and that you know you can do these things.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  To protect your rights, we need to make restrictions that forbid
 | 
				
			||||||
 | 
					anyone to deny you these rights or to ask you to surrender the rights.
 | 
				
			||||||
 | 
					These restrictions translate to certain responsibilities for you if you
 | 
				
			||||||
 | 
					distribute copies of the software, or if you modify it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  For example, if you distribute copies of such a program, whether
 | 
				
			||||||
 | 
					gratis or for a fee, you must give the recipients all the rights that
 | 
				
			||||||
 | 
					you have.  You must make sure that they, too, receive or can get the
 | 
				
			||||||
 | 
					source code.  And you must show them these terms so they know their
 | 
				
			||||||
 | 
					rights.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  We protect your rights with two steps: (1) copyright the software, and
 | 
				
			||||||
 | 
					(2) offer you this license which gives you legal permission to copy,
 | 
				
			||||||
 | 
					distribute and/or modify the software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Also, for each author's protection and ours, we want to make certain
 | 
				
			||||||
 | 
					that everyone understands that there is no warranty for this free
 | 
				
			||||||
 | 
					software.  If the software is modified by someone else and passed on, we
 | 
				
			||||||
 | 
					want its recipients to know that what they have is not the original, so
 | 
				
			||||||
 | 
					that any problems introduced by others will not reflect on the original
 | 
				
			||||||
 | 
					authors' reputations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Finally, any free program is threatened constantly by software
 | 
				
			||||||
 | 
					patents.  We wish to avoid the danger that redistributors of a free
 | 
				
			||||||
 | 
					program will individually obtain patent licenses, in effect making the
 | 
				
			||||||
 | 
					program proprietary.  To prevent this, we have made it clear that any
 | 
				
			||||||
 | 
					patent must be licensed for everyone's free use or not licensed at all.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The precise terms and conditions for copying, distribution and
 | 
				
			||||||
 | 
					modification follow.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							    GNU GENERAL PUBLIC LICENSE
 | 
				
			||||||
 | 
					   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  0. This License applies to any program or other work which contains
 | 
				
			||||||
 | 
					a notice placed by the copyright holder saying it may be distributed
 | 
				
			||||||
 | 
					under the terms of this General Public License.  The "Program", below,
 | 
				
			||||||
 | 
					refers to any such program or work, and a "work based on the Program"
 | 
				
			||||||
 | 
					means either the Program or any derivative work under copyright law:
 | 
				
			||||||
 | 
					that is to say, a work containing the Program or a portion of it,
 | 
				
			||||||
 | 
					either verbatim or with modifications and/or translated into another
 | 
				
			||||||
 | 
					language.  (Hereinafter, translation is included without limitation in
 | 
				
			||||||
 | 
					the term "modification".)  Each licensee is addressed as "you".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Activities other than copying, distribution and modification are not
 | 
				
			||||||
 | 
					covered by this License; they are outside its scope.  The act of
 | 
				
			||||||
 | 
					running the Program is not restricted, and the output from the Program
 | 
				
			||||||
 | 
					is covered only if its contents constitute a work based on the
 | 
				
			||||||
 | 
					Program (independent of having been made by running the Program).
 | 
				
			||||||
 | 
					Whether that is true depends on what the Program does.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. You may copy and distribute verbatim copies of the Program's
 | 
				
			||||||
 | 
					source code as you receive it, in any medium, provided that you
 | 
				
			||||||
 | 
					conspicuously and appropriately publish on each copy an appropriate
 | 
				
			||||||
 | 
					copyright notice and disclaimer of warranty; keep intact all the
 | 
				
			||||||
 | 
					notices that refer to this License and to the absence of any warranty;
 | 
				
			||||||
 | 
					and give any other recipients of the Program a copy of this License
 | 
				
			||||||
 | 
					along with the Program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You may charge a fee for the physical act of transferring a copy, and
 | 
				
			||||||
 | 
					you may at your option offer warranty protection in exchange for a fee.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. You may modify your copy or copies of the Program or any portion
 | 
				
			||||||
 | 
					of it, thus forming a work based on the Program, and copy and
 | 
				
			||||||
 | 
					distribute such modifications or work under the terms of Section 1
 | 
				
			||||||
 | 
					above, provided that you also meet all of these conditions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a) You must cause the modified files to carry prominent notices
 | 
				
			||||||
 | 
					    stating that you changed the files and the date of any change.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b) You must cause any work that you distribute or publish, that in
 | 
				
			||||||
 | 
					    whole or in part contains or is derived from the Program or any
 | 
				
			||||||
 | 
					    part thereof, to be licensed as a whole at no charge to all third
 | 
				
			||||||
 | 
					    parties under the terms of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    c) If the modified program normally reads commands interactively
 | 
				
			||||||
 | 
					    when run, you must cause it, when started running for such
 | 
				
			||||||
 | 
					    interactive use in the most ordinary way, to print or display an
 | 
				
			||||||
 | 
					    announcement including an appropriate copyright notice and a
 | 
				
			||||||
 | 
					    notice that there is no warranty (or else, saying that you provide
 | 
				
			||||||
 | 
					    a warranty) and that users may redistribute the program under
 | 
				
			||||||
 | 
					    these conditions, and telling the user how to view a copy of this
 | 
				
			||||||
 | 
					    License.  (Exception: if the Program itself is interactive but
 | 
				
			||||||
 | 
					    does not normally print such an announcement, your work based on
 | 
				
			||||||
 | 
					    the Program is not required to print an announcement.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					These requirements apply to the modified work as a whole.  If
 | 
				
			||||||
 | 
					identifiable sections of that work are not derived from the Program,
 | 
				
			||||||
 | 
					and can be reasonably considered independent and separate works in
 | 
				
			||||||
 | 
					themselves, then this License, and its terms, do not apply to those
 | 
				
			||||||
 | 
					sections when you distribute them as separate works.  But when you
 | 
				
			||||||
 | 
					distribute the same sections as part of a whole which is a work based
 | 
				
			||||||
 | 
					on the Program, the distribution of the whole must be on the terms of
 | 
				
			||||||
 | 
					this License, whose permissions for other licensees extend to the
 | 
				
			||||||
 | 
					entire whole, and thus to each and every part regardless of who wrote it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thus, it is not the intent of this section to claim rights or contest
 | 
				
			||||||
 | 
					your rights to work written entirely by you; rather, the intent is to
 | 
				
			||||||
 | 
					exercise the right to control the distribution of derivative or
 | 
				
			||||||
 | 
					collective works based on the Program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In addition, mere aggregation of another work not based on the Program
 | 
				
			||||||
 | 
					with the Program (or with a work based on the Program) on a volume of
 | 
				
			||||||
 | 
					a storage or distribution medium does not bring the other work under
 | 
				
			||||||
 | 
					the scope of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  3. You may copy and distribute the Program (or a work based on it,
 | 
				
			||||||
 | 
					under Section 2) in object code or executable form under the terms of
 | 
				
			||||||
 | 
					Sections 1 and 2 above provided that you also do one of the following:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    a) Accompany it with the complete corresponding machine-readable
 | 
				
			||||||
 | 
					    source code, which must be distributed under the terms of Sections
 | 
				
			||||||
 | 
					    1 and 2 above on a medium customarily used for software interchange; or,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    b) Accompany it with a written offer, valid for at least three
 | 
				
			||||||
 | 
					    years, to give any third party, for a charge no more than your
 | 
				
			||||||
 | 
					    cost of physically performing source distribution, a complete
 | 
				
			||||||
 | 
					    machine-readable copy of the corresponding source code, to be
 | 
				
			||||||
 | 
					    distributed under the terms of Sections 1 and 2 above on a medium
 | 
				
			||||||
 | 
					    customarily used for software interchange; or,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    c) Accompany it with the information you received as to the offer
 | 
				
			||||||
 | 
					    to distribute corresponding source code.  (This alternative is
 | 
				
			||||||
 | 
					    allowed only for noncommercial distribution and only if you
 | 
				
			||||||
 | 
					    received the program in object code or executable form with such
 | 
				
			||||||
 | 
					    an offer, in accord with Subsection b above.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The source code for a work means the preferred form of the work for
 | 
				
			||||||
 | 
					making modifications to it.  For an executable work, complete source
 | 
				
			||||||
 | 
					code means all the source code for all modules it contains, plus any
 | 
				
			||||||
 | 
					associated interface definition files, plus the scripts used to
 | 
				
			||||||
 | 
					control compilation and installation of the executable.  However, as a
 | 
				
			||||||
 | 
					special exception, the source code distributed need not include
 | 
				
			||||||
 | 
					anything that is normally distributed (in either source or binary
 | 
				
			||||||
 | 
					form) with the major components (compiler, kernel, and so on) of the
 | 
				
			||||||
 | 
					operating system on which the executable runs, unless that component
 | 
				
			||||||
 | 
					itself accompanies the executable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If distribution of executable or object code is made by offering
 | 
				
			||||||
 | 
					access to copy from a designated place, then offering equivalent
 | 
				
			||||||
 | 
					access to copy the source code from the same place counts as
 | 
				
			||||||
 | 
					distribution of the source code, even though third parties are not
 | 
				
			||||||
 | 
					compelled to copy the source along with the object code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  4. You may not copy, modify, sublicense, or distribute the Program
 | 
				
			||||||
 | 
					except as expressly provided under this License.  Any attempt
 | 
				
			||||||
 | 
					otherwise to copy, modify, sublicense or distribute the Program is
 | 
				
			||||||
 | 
					void, and will automatically terminate your rights under this License.
 | 
				
			||||||
 | 
					However, parties who have received copies, or rights, from you under
 | 
				
			||||||
 | 
					this License will not have their licenses terminated so long as such
 | 
				
			||||||
 | 
					parties remain in full compliance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  5. You are not required to accept this License, since you have not
 | 
				
			||||||
 | 
					signed it.  However, nothing else grants you permission to modify or
 | 
				
			||||||
 | 
					distribute the Program or its derivative works.  These actions are
 | 
				
			||||||
 | 
					prohibited by law if you do not accept this License.  Therefore, by
 | 
				
			||||||
 | 
					modifying or distributing the Program (or any work based on the
 | 
				
			||||||
 | 
					Program), you indicate your acceptance of this License to do so, and
 | 
				
			||||||
 | 
					all its terms and conditions for copying, distributing or modifying
 | 
				
			||||||
 | 
					the Program or works based on it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  6. Each time you redistribute the Program (or any work based on the
 | 
				
			||||||
 | 
					Program), the recipient automatically receives a license from the
 | 
				
			||||||
 | 
					original licensor to copy, distribute or modify the Program subject to
 | 
				
			||||||
 | 
					these terms and conditions.  You may not impose any further
 | 
				
			||||||
 | 
					restrictions on the recipients' exercise of the rights granted herein.
 | 
				
			||||||
 | 
					You are not responsible for enforcing compliance by third parties to
 | 
				
			||||||
 | 
					this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  7. If, as a consequence of a court judgment or allegation of patent
 | 
				
			||||||
 | 
					infringement or for any other reason (not limited to patent issues),
 | 
				
			||||||
 | 
					conditions are imposed on you (whether by court order, agreement or
 | 
				
			||||||
 | 
					otherwise) that contradict the conditions of this License, they do not
 | 
				
			||||||
 | 
					excuse you from the conditions of this License.  If you cannot
 | 
				
			||||||
 | 
					distribute so as to satisfy simultaneously your obligations under this
 | 
				
			||||||
 | 
					License and any other pertinent obligations, then as a consequence you
 | 
				
			||||||
 | 
					may not distribute the Program at all.  For example, if a patent
 | 
				
			||||||
 | 
					license would not permit royalty-free redistribution of the Program by
 | 
				
			||||||
 | 
					all those who receive copies directly or indirectly through you, then
 | 
				
			||||||
 | 
					the only way you could satisfy both it and this License would be to
 | 
				
			||||||
 | 
					refrain entirely from distribution of the Program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If any portion of this section is held invalid or unenforceable under
 | 
				
			||||||
 | 
					any particular circumstance, the balance of the section is intended to
 | 
				
			||||||
 | 
					apply and the section as a whole is intended to apply in other
 | 
				
			||||||
 | 
					circumstances.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is not the purpose of this section to induce you to infringe any
 | 
				
			||||||
 | 
					patents or other property right claims or to contest validity of any
 | 
				
			||||||
 | 
					such claims; this section has the sole purpose of protecting the
 | 
				
			||||||
 | 
					integrity of the free software distribution system, which is
 | 
				
			||||||
 | 
					implemented by public license practices.  Many people have made
 | 
				
			||||||
 | 
					generous contributions to the wide range of software distributed
 | 
				
			||||||
 | 
					through that system in reliance on consistent application of that
 | 
				
			||||||
 | 
					system; it is up to the author/donor to decide if he or she is willing
 | 
				
			||||||
 | 
					to distribute software through any other system and a licensee cannot
 | 
				
			||||||
 | 
					impose that choice.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This section is intended to make thoroughly clear what is believed to
 | 
				
			||||||
 | 
					be a consequence of the rest of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  8. If the distribution and/or use of the Program is restricted in
 | 
				
			||||||
 | 
					certain countries either by patents or by copyrighted interfaces, the
 | 
				
			||||||
 | 
					original copyright holder who places the Program under this License
 | 
				
			||||||
 | 
					may add an explicit geographical distribution limitation excluding
 | 
				
			||||||
 | 
					those countries, so that distribution is permitted only in or among
 | 
				
			||||||
 | 
					countries not thus excluded.  In such case, this License incorporates
 | 
				
			||||||
 | 
					the limitation as if written in the body of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  9. The Free Software Foundation may publish revised and/or new versions
 | 
				
			||||||
 | 
					of the General Public License from time to time.  Such new versions will
 | 
				
			||||||
 | 
					be similar in spirit to the present version, but may differ in detail to
 | 
				
			||||||
 | 
					address new problems or concerns.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Each version is given a distinguishing version number.  If the Program
 | 
				
			||||||
 | 
					specifies a version number of this License which applies to it and "any
 | 
				
			||||||
 | 
					later version", you have the option of following the terms and conditions
 | 
				
			||||||
 | 
					either of that version or of any later version published by the Free
 | 
				
			||||||
 | 
					Software Foundation.  If the Program does not specify a version number of
 | 
				
			||||||
 | 
					this License, you may choose any version ever published by the Free Software
 | 
				
			||||||
 | 
					Foundation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  10. If you wish to incorporate parts of the Program into other free
 | 
				
			||||||
 | 
					programs whose distribution conditions are different, write to the author
 | 
				
			||||||
 | 
					to ask for permission.  For software which is copyrighted by the Free
 | 
				
			||||||
 | 
					Software Foundation, write to the Free Software Foundation; we sometimes
 | 
				
			||||||
 | 
					make exceptions for this.  Our decision will be guided by the two goals
 | 
				
			||||||
 | 
					of preserving the free status of all derivatives of our free software and
 | 
				
			||||||
 | 
					of promoting the sharing and reuse of software generally.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								    NO WARRANTY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 | 
				
			||||||
 | 
					FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
 | 
				
			||||||
 | 
					OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
 | 
				
			||||||
 | 
					PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
 | 
				
			||||||
 | 
					OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
 | 
				
			||||||
 | 
					TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
 | 
				
			||||||
 | 
					PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
 | 
				
			||||||
 | 
					REPAIR OR CORRECTION.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
 | 
				
			||||||
 | 
					WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
 | 
				
			||||||
 | 
					REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
 | 
				
			||||||
 | 
					INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
 | 
				
			||||||
 | 
					OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
 | 
				
			||||||
 | 
					TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
 | 
				
			||||||
 | 
					YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
 | 
				
			||||||
 | 
					PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 | 
				
			||||||
 | 
					POSSIBILITY OF SUCH DAMAGES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							     END OF TERMS AND CONDITIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						    How to Apply These Terms to Your New Programs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  If you develop a new program, and you want it to be of the greatest
 | 
				
			||||||
 | 
					possible use to the public, the best way to achieve this is to make it
 | 
				
			||||||
 | 
					free software which everyone can redistribute and change under these terms.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  To do so, attach the following notices to the program.  It is safest
 | 
				
			||||||
 | 
					to attach them to the start of each source file to most effectively
 | 
				
			||||||
 | 
					convey the exclusion of warranty; and each file should have at least
 | 
				
			||||||
 | 
					the "copyright" line and a pointer to where the full notice is found.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <one line to give the program's name and a brief idea of what it does.>
 | 
				
			||||||
 | 
					    Copyright (C) <year>  <name of author>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					    it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					    the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					    (at your option) any later version.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					    GNU General Public License for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					    along with this program; if not, write to the Free Software
 | 
				
			||||||
 | 
					    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Also add information on how to contact you by electronic and paper mail.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the program is interactive, make it output a short notice like this
 | 
				
			||||||
 | 
					when it starts in an interactive mode:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Gnomovision version 69, Copyright (C) year  name of author
 | 
				
			||||||
 | 
					    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
 | 
				
			||||||
 | 
					    This is free software, and you are welcome to redistribute it
 | 
				
			||||||
 | 
					    under certain conditions; type `show c' for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The hypothetical commands `show w' and `show c' should show the appropriate
 | 
				
			||||||
 | 
					parts of the General Public License.  Of course, the commands you use may
 | 
				
			||||||
 | 
					be called something other than `show w' and `show c'; they could even be
 | 
				
			||||||
 | 
					mouse-clicks or menu items--whatever suits your program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should also get your employer (if you work as a programmer) or your
 | 
				
			||||||
 | 
					school, if any, to sign a "copyright disclaimer" for the program, if
 | 
				
			||||||
 | 
					necessary.  Here is a sample; alter the names:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
 | 
				
			||||||
 | 
					  `Gnomovision' (which makes passes at compilers) written by James Hacker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <signature of Ty Coon>, 1 April 1989
 | 
				
			||||||
 | 
					  Ty Coon, President of Vice
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This General Public License does not permit incorporating your program into
 | 
				
			||||||
 | 
					proprietary programs.  If your program is a subroutine library, you may
 | 
				
			||||||
 | 
					consider it more useful to permit linking proprietary applications with the
 | 
				
			||||||
 | 
					library.  If this is what you want to do, use the GNU Library General
 | 
				
			||||||
 | 
					Public License instead of this License.
 | 
				
			||||||
							
								
								
									
										195
									
								
								wmbattery/INSTALL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								wmbattery/INSTALL
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,195 @@
 | 
				
			||||||
 | 
					Quickstart:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   make
 | 
				
			||||||
 | 
					   make install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To install in the same location as previous version's Makefile did,
 | 
				
			||||||
 | 
					run configure like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ./configure --prefix=/usr/X11R6 --datadir=/usr/share
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that you will need libxpm to build and use the program.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Basic Installation
 | 
				
			||||||
 | 
					==================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   These are generic installation instructions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   The `configure' shell script attempts to guess correct values for
 | 
				
			||||||
 | 
					various system-dependent variables used during compilation.  It uses
 | 
				
			||||||
 | 
					those values to create a `Makefile' in each directory of the package.
 | 
				
			||||||
 | 
					It may also create one or more `.h' files containing system-dependent
 | 
				
			||||||
 | 
					definitions.  Finally, it creates a shell script `config.status' that
 | 
				
			||||||
 | 
					you can run in the future to recreate the current configuration, a file
 | 
				
			||||||
 | 
					`config.cache' that saves the results of its tests to speed up
 | 
				
			||||||
 | 
					reconfiguring, and a file `config.log' containing compiler output
 | 
				
			||||||
 | 
					(useful mainly for debugging `configure').
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If you need to do unusual things to compile the package, please try
 | 
				
			||||||
 | 
					to figure out how `configure' could check whether to do them, and mail
 | 
				
			||||||
 | 
					diffs or instructions to the address given in the `README' so they can
 | 
				
			||||||
 | 
					be considered for the next release.  If at some point `config.cache'
 | 
				
			||||||
 | 
					contains results you don't want to keep, you may remove or edit it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   The file `configure.in' is used to create `configure' by a program
 | 
				
			||||||
 | 
					called `autoconf'.  You only need `configure.in' if you want to change
 | 
				
			||||||
 | 
					it or regenerate `configure' using a newer version of `autoconf'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The simplest way to compile this package is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. `cd' to the directory containing the package's source code and type
 | 
				
			||||||
 | 
					     `./configure' to configure the package for your system.  If you're
 | 
				
			||||||
 | 
					     using `csh' on an old version of System V, you might need to type
 | 
				
			||||||
 | 
					     `sh ./configure' instead to prevent `csh' from trying to execute
 | 
				
			||||||
 | 
					     `configure' itself.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     Running `configure' takes awhile.  While running, it prints some
 | 
				
			||||||
 | 
					     messages telling which features it is checking for.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. Type `make' to compile the package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  3. Optionally, type `make check' to run any self-tests that come with
 | 
				
			||||||
 | 
					     the package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  4. Type `make install' to install the programs and any data files and
 | 
				
			||||||
 | 
					     documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  5. You can remove the program binaries and object files from the
 | 
				
			||||||
 | 
					     source code directory by typing `make clean'.  To also remove the
 | 
				
			||||||
 | 
					     files that `configure' created (so you can compile the package for
 | 
				
			||||||
 | 
					     a different kind of computer), type `make distclean'.  There is
 | 
				
			||||||
 | 
					     also a `make maintainer-clean' target, but that is intended mainly
 | 
				
			||||||
 | 
					     for the package's developers.  If you use it, you may have to get
 | 
				
			||||||
 | 
					     all sorts of other programs in order to regenerate files that came
 | 
				
			||||||
 | 
					     with the distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Compilers and Options
 | 
				
			||||||
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Some systems require unusual options for compilation or linking that
 | 
				
			||||||
 | 
					the `configure' script does not know about.  You can give `configure'
 | 
				
			||||||
 | 
					initial values for variables by setting them in the environment.  Using
 | 
				
			||||||
 | 
					a Bourne-compatible shell, you can do that on the command line like
 | 
				
			||||||
 | 
					this:
 | 
				
			||||||
 | 
					     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Or on systems that have the `env' program, you can do it like this:
 | 
				
			||||||
 | 
					     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Compiling For Multiple Architectures
 | 
				
			||||||
 | 
					====================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   You can compile the package for more than one kind of computer at the
 | 
				
			||||||
 | 
					same time, by placing the object files for each architecture in their
 | 
				
			||||||
 | 
					own directory.  To do this, you must use a version of `make' that
 | 
				
			||||||
 | 
					supports the `VPATH' variable, such as GNU `make'.  `cd' to the
 | 
				
			||||||
 | 
					directory where you want the object files and executables to go and run
 | 
				
			||||||
 | 
					the `configure' script.  `configure' automatically checks for the
 | 
				
			||||||
 | 
					source code in the directory that `configure' is in and in `..'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If you have to use a `make' that does not supports the `VPATH'
 | 
				
			||||||
 | 
					variable, you have to compile the package for one architecture at a time
 | 
				
			||||||
 | 
					in the source code directory.  After you have installed the package for
 | 
				
			||||||
 | 
					one architecture, use `make distclean' before reconfiguring for another
 | 
				
			||||||
 | 
					architecture.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Installation Names
 | 
				
			||||||
 | 
					==================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   By default, `make install' will install the package's files in
 | 
				
			||||||
 | 
					`/usr/local/bin', `/usr/local/man', etc.  You can specify an
 | 
				
			||||||
 | 
					installation prefix other than `/usr/local' by giving `configure' the
 | 
				
			||||||
 | 
					option `--prefix=PATH'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   You can specify separate installation prefixes for
 | 
				
			||||||
 | 
					architecture-specific files and architecture-independent files.  If you
 | 
				
			||||||
 | 
					give `configure' the option `--exec-prefix=PATH', the package will use
 | 
				
			||||||
 | 
					PATH as the prefix for installing programs and libraries.
 | 
				
			||||||
 | 
					Documentation and other data files will still use the regular prefix.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   In addition, if you use an unusual directory layout you can give
 | 
				
			||||||
 | 
					options like `--bindir=PATH' to specify different values for particular
 | 
				
			||||||
 | 
					kinds of files.  Run `configure --help' for a list of the directories
 | 
				
			||||||
 | 
					you can set and what kinds of files go in them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If the package supports it, you can cause programs to be installed
 | 
				
			||||||
 | 
					with an extra prefix or suffix on their names by giving `configure' the
 | 
				
			||||||
 | 
					option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Optional Features
 | 
				
			||||||
 | 
					=================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Some packages pay attention to `--enable-FEATURE' options to
 | 
				
			||||||
 | 
					`configure', where FEATURE indicates an optional part of the package.
 | 
				
			||||||
 | 
					They may also pay attention to `--with-PACKAGE' options, where PACKAGE
 | 
				
			||||||
 | 
					is something like `gnu-as' or `x' (for the X Window System).  The
 | 
				
			||||||
 | 
					`README' should mention any `--enable-' and `--with-' options that the
 | 
				
			||||||
 | 
					package recognizes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   For packages that use the X Window System, `configure' can usually
 | 
				
			||||||
 | 
					find the X include and library files automatically, but if it doesn't,
 | 
				
			||||||
 | 
					you can use the `configure' options `--x-includes=DIR' and
 | 
				
			||||||
 | 
					`--x-libraries=DIR' to specify their locations.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Specifying the System Type
 | 
				
			||||||
 | 
					==========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   There may be some features `configure' can not figure out
 | 
				
			||||||
 | 
					automatically, but needs to determine by the type of host the package
 | 
				
			||||||
 | 
					will run on.  Usually `configure' can figure that out, but if it prints
 | 
				
			||||||
 | 
					a message saying it can not guess the host type, give it the
 | 
				
			||||||
 | 
					`--host=TYPE' option.  TYPE can either be a short name for the system
 | 
				
			||||||
 | 
					type, such as `sun4', or a canonical name with three fields:
 | 
				
			||||||
 | 
					     CPU-COMPANY-SYSTEM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See the file `config.sub' for the possible values of each field.  If
 | 
				
			||||||
 | 
					`config.sub' isn't included in this package, then this package doesn't
 | 
				
			||||||
 | 
					need to know the host type.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If you are building compiler tools for cross-compiling, you can also
 | 
				
			||||||
 | 
					use the `--target=TYPE' option to select the type of system they will
 | 
				
			||||||
 | 
					produce code for and the `--build=TYPE' option to select the type of
 | 
				
			||||||
 | 
					system on which you are compiling the package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sharing Defaults
 | 
				
			||||||
 | 
					================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   If you want to set default values for `configure' scripts to share,
 | 
				
			||||||
 | 
					you can create a site shell script called `config.site' that gives
 | 
				
			||||||
 | 
					default values for variables like `CC', `cache_file', and `prefix'.
 | 
				
			||||||
 | 
					`configure' looks for `PREFIX/share/config.site' if it exists, then
 | 
				
			||||||
 | 
					`PREFIX/etc/config.site' if it exists.  Or, you can set the
 | 
				
			||||||
 | 
					`CONFIG_SITE' environment variable to the location of the site script.
 | 
				
			||||||
 | 
					A warning: not all `configure' scripts look for a site script.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Operation Controls
 | 
				
			||||||
 | 
					==================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   `configure' recognizes the following options to control how it
 | 
				
			||||||
 | 
					operates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`--cache-file=FILE'
 | 
				
			||||||
 | 
					     Use and save the results of the tests in FILE instead of
 | 
				
			||||||
 | 
					     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
 | 
				
			||||||
 | 
					     debugging `configure'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`--help'
 | 
				
			||||||
 | 
					     Print a summary of the options to `configure', and exit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`--quiet'
 | 
				
			||||||
 | 
					`--silent'
 | 
				
			||||||
 | 
					`-q'
 | 
				
			||||||
 | 
					     Do not print messages saying which checks are being made.  To
 | 
				
			||||||
 | 
					     suppress all normal output, redirect it to `/dev/null' (any error
 | 
				
			||||||
 | 
					     messages will still be shown).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`--srcdir=DIR'
 | 
				
			||||||
 | 
					     Look for the package's source code in directory DIR.  Usually
 | 
				
			||||||
 | 
					     `configure' can determine that directory automatically.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`--version'
 | 
				
			||||||
 | 
					     Print the version of Autoconf used to generate the `configure'
 | 
				
			||||||
 | 
					     script, and exit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`configure' also accepts some other, not widely useful, options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								wmbattery/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								wmbattery/Makefile
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					include makeinfo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: wmbattery
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					clean:
 | 
				
			||||||
 | 
						rm -f wmbattery *.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					distclean: clean
 | 
				
			||||||
 | 
						rm -f config.status config.cache config.log makeinfo config.h configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install: all
 | 
				
			||||||
 | 
						$(INSTALL) -d $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(icondir)
 | 
				
			||||||
 | 
						$(INSTALL_PROGRAM) wmbattery $(DESTDIR)$(bindir)
 | 
				
			||||||
 | 
						$(INSTALL_DATA) $(srcdir)/wmbattery.1x $(DESTDIR)$(man1dir)/wmbattery.1x
 | 
				
			||||||
 | 
						$(INSTALL_DATA) $(srcdir)/*.xpm $(DESTDIR)$(icondir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uninstall:
 | 
				
			||||||
 | 
						rm -rf $(bindir)/wmbattery $(man1dir)/wmbattery.1x $(icondir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OBJS=wmbattery.o acpi.o sonypi.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef USE_HAL
 | 
				
			||||||
 | 
					LIBS+=$(shell pkg-config --libs hal)
 | 
				
			||||||
 | 
					OBJS+=simplehal.o
 | 
				
			||||||
 | 
					CFLAGS+=-DHAL
 | 
				
			||||||
 | 
					simplehal.o: simplehal.c
 | 
				
			||||||
 | 
						$(CC) $(CFLAGS) $(shell pkg-config --cflags hal) -c simplehal.c -o simplehal.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifdef USE_UPOWER
 | 
				
			||||||
 | 
					LIBS+=$(shell pkg-config --libs upower-glib)
 | 
				
			||||||
 | 
					OBJS+=upower.o
 | 
				
			||||||
 | 
					CFLAGS+=-DUPOWER
 | 
				
			||||||
 | 
					upower.o: upower.c
 | 
				
			||||||
 | 
						$(CC) $(CPPFLAGS) $(CFLAGS) $(shell pkg-config --cflags upower-glib) -c upower.c -o upower.o
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LIBS+=-lapm -lXext -lXpm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery: $(OBJS)
 | 
				
			||||||
 | 
						$(CC) -o wmbattery $(LDFLAGS) $(OBJS) $(LIBS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery.o: wmbattery.c wmbattery.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure: configure.ac
 | 
				
			||||||
 | 
						autoconf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config.status: configure
 | 
				
			||||||
 | 
						./configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					makeinfo: autoconf/makeinfo.in config.status
 | 
				
			||||||
 | 
						./config.status
 | 
				
			||||||
							
								
								
									
										41
									
								
								wmbattery/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								wmbattery/README
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					wmbattery displays the status of your laptop's battery in a small icon. This
 | 
				
			||||||
 | 
					includes if it is plugged in, if the battery is charging, how many minutes
 | 
				
			||||||
 | 
					of battery life remain, battery life remaining (with both a percentage and a
 | 
				
			||||||
 | 
					graph), and battery status (high - green, low - yellow, or critical - red).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery is based on wmapm by Chris D. Faulhaber <jedgar@speck.ml.org>
 | 
				
			||||||
 | 
					-- see the copyright file for more information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmapm is a nice program - why have I modified it into wmbattery? Here are
 | 
				
			||||||
 | 
					some improvements in wmbattery:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - Improved icon layout. I crammed the same information into less space
 | 
				
			||||||
 | 
					    while making the icon more elegant and visually pleasing (IMHO).
 | 
				
			||||||
 | 
					  - Easier to drag onto dock.
 | 
				
			||||||
 | 
					  - It consumes a little less memory.
 | 
				
			||||||
 | 
					  - Uses only 10 colors.
 | 
				
			||||||
 | 
					  - You can run in on a different display via -d (broken in wmapm).
 | 
				
			||||||
 | 
					  - Support for getting battery status from the sonypi driver instead of APM,
 | 
				
			||||||
 | 
					    for some Sony laptops that do not have apm support.
 | 
				
			||||||
 | 
					  - ACPI support, including multiple battery support and battery charging
 | 
				
			||||||
 | 
					    completion countdown timer.
 | 
				
			||||||
 | 
					  - HAL support.
 | 
				
			||||||
 | 
					  - upower support.
 | 
				
			||||||
 | 
					  - Can make its own estimatess of time remaining or time until full
 | 
				
			||||||
 | 
					    charge, even if APM does not.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Conversely, here are some reasons to stick with wmapm:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - You like its look.
 | 
				
			||||||
 | 
					  - It has a neat rainbow-colored progress bar.
 | 
				
			||||||
 | 
					  - It has buttons to suspend the laptop and stuff.
 | 
				
			||||||
 | 
					  - It may be more actively and/or better maintained. Or not. 
 | 
				
			||||||
 | 
					    Decide for yourself.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Still, forking is evil, and if I was doing this all over again, I suppose
 | 
				
			||||||
 | 
					I'd try to add theme support to wmamn so it could morph into wmbattery with
 | 
				
			||||||
 | 
					a theme. Oh well.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The homepage for wmbattery is <http://kitenet.net/~joey/code/wmbattery/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Joey Hess <joey@kitenet.net>
 | 
				
			||||||
							
								
								
									
										11
									
								
								wmbattery/TODO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								wmbattery/TODO
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					* The dial doesn't fill up/drain out very prettily. Add some code to special
 | 
				
			||||||
 | 
					  case things so it looks better.
 | 
				
			||||||
 | 
					* Make it load up the mask from file, not #include it.
 | 
				
			||||||
 | 
					* Allow user-settable colors, like asclock does.
 | 
				
			||||||
 | 
					* Improve the battery lifetime estimation algo.
 | 
				
			||||||
 | 
					* Break the ACPI code out into a proper standalone library (already 2 other
 | 
				
			||||||
 | 
					  programs use it).
 | 
				
			||||||
 | 
					* Make -b 0 display an overall average of the status of all batteries,
 | 
				
			||||||
 | 
					  much like apm does on multi-battery laptops.
 | 
				
			||||||
 | 
					* The simplehal interface is not very good. It polls once per second, 
 | 
				
			||||||
 | 
					  it would be much better if it let HAL notify it about changes instead.
 | 
				
			||||||
							
								
								
									
										445
									
								
								wmbattery/acpi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										445
									
								
								wmbattery/acpi.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,445 @@
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					 * A not-yet-general-purpose ACPI library, by Joey Hess <joey@kitenet.net>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					#include <dirent.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <fnmatch.h>
 | 
				
			||||||
 | 
					#ifdef ACPI_APM
 | 
				
			||||||
 | 
					#include "apm.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					#include <sys/stat.h>
 | 
				
			||||||
 | 
					#include <fcntl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "acpi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define SYSFS_PATH "/sys/class/power_supply"
 | 
				
			||||||
 | 
					#define ACPI_MAXITEM 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int acpi_batt_count = 0;
 | 
				
			||||||
 | 
					/* Filenames of the battery info files for each system battery. */
 | 
				
			||||||
 | 
					char acpi_batt_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					/* Filenames of the battery status files for each system battery. */
 | 
				
			||||||
 | 
					char acpi_batt_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					/* Stores battery capacity, or 0 if the battery is absent. */
 | 
				
			||||||
 | 
					int acpi_batt_capacity[ACPI_MAXITEM];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int acpi_ac_count = 0;
 | 
				
			||||||
 | 
					char acpi_ac_adapter_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					char acpi_ac_adapter_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *acpi_labels[] = {
 | 
				
			||||||
 | 
						"uevent",
 | 
				
			||||||
 | 
						"status",
 | 
				
			||||||
 | 
						"Battery",
 | 
				
			||||||
 | 
						"Mains",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_CAPACITY=",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_??????_FULL_DESIGN=", /* CHARGE or ENERGY */
 | 
				
			||||||
 | 
						"POWER_SUPPLY_PRESENT=",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_??????_NOW=",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_CURRENT_NOW=",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_STATUS=",
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
						"thermal_zone",
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						"POWER_SUPPLY_ONLINE=",
 | 
				
			||||||
 | 
						"POWER_SUPPLY_??????_FULL=",
 | 
				
			||||||
 | 
						NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
					int acpi_thermal_count = 0;
 | 
				
			||||||
 | 
					char acpi_thermal_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					char acpi_thermal_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Read in an entire ACPI proc file (well, the first 1024 bytes anyway), and
 | 
				
			||||||
 | 
					 * return a statically allocated array containing it. */
 | 
				
			||||||
 | 
					inline char *get_acpi_file (const char *file) {
 | 
				
			||||||
 | 
						int fd;
 | 
				
			||||||
 | 
						int end;
 | 
				
			||||||
 | 
						static char buf[1024];
 | 
				
			||||||
 | 
						fd = open(file, O_RDONLY);
 | 
				
			||||||
 | 
						if (fd == -1) return NULL;
 | 
				
			||||||
 | 
						end = read(fd, buf, sizeof(buf));
 | 
				
			||||||
 | 
						buf[end-1] = '\0';
 | 
				
			||||||
 | 
						close(fd);
 | 
				
			||||||
 | 
						return buf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int strmcmp(const char *s1, const char *s2)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (; (*s1 == *s2) || (*s2 == '?'); s1++, s2++) {
 | 
				
			||||||
 | 
							if (*s1 == '\0')
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (*s2 == '\0')
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Given a buffer holding an acpi file, searches for the given key in it,
 | 
				
			||||||
 | 
					 * and returns the numeric value. 0 is returned on failure. */
 | 
				
			||||||
 | 
					inline int scan_acpi_num (const char *buf, const char *key) {
 | 
				
			||||||
 | 
						char *ptr;
 | 
				
			||||||
 | 
						int ret = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							ptr = strchr(buf, '\n');
 | 
				
			||||||
 | 
							if (!strmcmp(buf, key)) {
 | 
				
			||||||
 | 
								if ((ptr = strchr(buf, '='))) {
 | 
				
			||||||
 | 
									sscanf(ptr + 1, "%d", &ret);
 | 
				
			||||||
 | 
									return ret;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									return 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (ptr)
 | 
				
			||||||
 | 
								ptr++;
 | 
				
			||||||
 | 
							buf = ptr;
 | 
				
			||||||
 | 
						} while (buf != NULL);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Given a buffer holding an acpi file, searches for the given key in it,
 | 
				
			||||||
 | 
					 * and returns its value in a statically allocated string. */
 | 
				
			||||||
 | 
					inline char *scan_acpi_value (const char *buf, const char *key) {
 | 
				
			||||||
 | 
						char *ptr;
 | 
				
			||||||
 | 
						static char ret[256];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							ptr = strchr(buf, '\n');
 | 
				
			||||||
 | 
							if (!strmcmp(buf, key)) {
 | 
				
			||||||
 | 
								if ((ptr = strchr(buf, '='))) {
 | 
				
			||||||
 | 
									if (sscanf(ptr + 1, "%255s", ret) == 1) {
 | 
				
			||||||
 | 
										return ret;
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										return NULL;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									return NULL;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (ptr)
 | 
				
			||||||
 | 
								ptr++;
 | 
				
			||||||
 | 
							buf = ptr;
 | 
				
			||||||
 | 
						} while (buf != NULL);
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Read an ACPI proc file, pull out the requested piece of information, and
 | 
				
			||||||
 | 
					 * return it (statically allocated string). Returns NULL on error, This is 
 | 
				
			||||||
 | 
					 * the slow, dumb way, fine for initialization or if only one value is needed
 | 
				
			||||||
 | 
					 * from a file, slow if called many times. */
 | 
				
			||||||
 | 
					char *get_acpi_value (const char *file, const char *key) {
 | 
				
			||||||
 | 
						char *buf = get_acpi_file(file);
 | 
				
			||||||
 | 
						if (! buf) return NULL;
 | 
				
			||||||
 | 
						return scan_acpi_value(buf, key);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns the last full charge capacity of a battery.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int get_acpi_batt_capacity(int battery) {
 | 
				
			||||||
 | 
						char *s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						s = get_acpi_value(acpi_batt_info[battery], acpi_labels[label_last_full_capacity]);
 | 
				
			||||||
 | 
						if (s == NULL) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return atoi(s);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Comparison function for qsort. */
 | 
				
			||||||
 | 
					int _acpi_compare_strings (const void *a, const void *b) {
 | 
				
			||||||
 | 
						const char **pa = (const char **)a;
 | 
				
			||||||
 | 
						const char **pb = (const char **)b;
 | 
				
			||||||
 | 
						return strcasecmp((const char *)*pa, (const char *)*pb);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Find something (batteries, ac adpaters, etc), and set up a string array
 | 
				
			||||||
 | 
					 * to hold the paths to info and status files of the things found.
 | 
				
			||||||
 | 
					 * Returns the number of items found. */
 | 
				
			||||||
 | 
					int find_items (char *itemname, char infoarray[ACPI_MAXITEM][128],
 | 
				
			||||||
 | 
							                char statusarray[ACPI_MAXITEM][128]) {
 | 
				
			||||||
 | 
						DIR *dir;
 | 
				
			||||||
 | 
						struct dirent *ent;
 | 
				
			||||||
 | 
						int num_devices=0;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						char **devices = malloc(ACPI_MAXITEM * sizeof(char *));
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						char pathname[128];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sprintf(pathname, SYSFS_PATH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dir = opendir(pathname);
 | 
				
			||||||
 | 
						if (dir == NULL)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						while ((ent = readdir(dir))) {
 | 
				
			||||||
 | 
							char filename[128];
 | 
				
			||||||
 | 
							char buf[1024];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!strcmp(".", ent->d_name) || 
 | 
				
			||||||
 | 
							    !strcmp("..", ent->d_name))
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							snprintf(filename, sizeof(filename), SYSFS_PATH "/%s/type", ent->d_name);
 | 
				
			||||||
 | 
							int fd = open(filename, O_RDONLY);
 | 
				
			||||||
 | 
							if (fd != -1) {
 | 
				
			||||||
 | 
								int end = read(fd, buf, sizeof(buf));
 | 
				
			||||||
 | 
								buf[end-1] = '\0';
 | 
				
			||||||
 | 
								close(fd);
 | 
				
			||||||
 | 
								if (strstr(buf, itemname) != buf)
 | 
				
			||||||
 | 
									continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							devices[num_devices]=strdup(ent->d_name);
 | 
				
			||||||
 | 
							num_devices++;
 | 
				
			||||||
 | 
							if (num_devices >= ACPI_MAXITEM)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						closedir(dir);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Sort, since readdir can return in any order. /sys/ does
 | 
				
			||||||
 | 
						 * sometimes list BAT1 before BAT0. */
 | 
				
			||||||
 | 
						qsort(devices, num_devices, sizeof(char *), _acpi_compare_strings);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for (i = 0; i < num_devices; i++) {
 | 
				
			||||||
 | 
							snprintf(infoarray[i], sizeof(infoarray[i]), SYSFS_PATH "/%s/%s", devices[i],
 | 
				
			||||||
 | 
								acpi_labels[label_info]);
 | 
				
			||||||
 | 
							snprintf(statusarray[i], sizeof(statusarray[i]), SYSFS_PATH "/%s/%s", devices[i],
 | 
				
			||||||
 | 
								acpi_labels[label_status]);
 | 
				
			||||||
 | 
							free(devices[i]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return num_devices;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Find batteries, return the number, and set acpi_batt_count to it as well. */
 | 
				
			||||||
 | 
					int find_batteries(void) {
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						acpi_batt_count = find_items(acpi_labels[label_battery], acpi_batt_info, acpi_batt_status);
 | 
				
			||||||
 | 
						for (i = 0; i < acpi_batt_count; i++)
 | 
				
			||||||
 | 
							acpi_batt_capacity[i] = get_acpi_batt_capacity(i);
 | 
				
			||||||
 | 
						return acpi_batt_count;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Find AC power adapters, return the number found, and set acpi_ac_count to it
 | 
				
			||||||
 | 
					 * as well. */
 | 
				
			||||||
 | 
					int find_ac_adapters(void) {
 | 
				
			||||||
 | 
						acpi_ac_count = find_items(acpi_labels[label_ac_adapter], acpi_ac_adapter_info, acpi_ac_adapter_status);
 | 
				
			||||||
 | 
						return acpi_ac_count;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
					/* Find thermal information sources, return the number found, and set
 | 
				
			||||||
 | 
					 * thermal_count to it as well. */
 | 
				
			||||||
 | 
					int find_thermal(void) {
 | 
				
			||||||
 | 
						acpi_thermal_count = find_items(acpi_labels[label_thermal], acpi_thermal_info, acpi_thermal_status);
 | 
				
			||||||
 | 
						return acpi_thermal_count;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns true if the system is on ac power. Call find_ac_adapters first. */
 | 
				
			||||||
 | 
					int on_ac_power (void) {
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						for (i = 0; i < acpi_ac_count; i++) {
 | 
				
			||||||
 | 
							char *online=get_acpi_value(acpi_ac_adapter_info[i], acpi_labels[label_ac_state]);
 | 
				
			||||||
 | 
							if (online && atoi(online))
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* See if we have ACPI support and check version. Also find batteries and
 | 
				
			||||||
 | 
					 * ac power adapters. */
 | 
				
			||||||
 | 
					int acpi_supported (void) {
 | 
				
			||||||
 | 
						char *version;
 | 
				
			||||||
 | 
						DIR *dir;
 | 
				
			||||||
 | 
						int num;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(dir = opendir(SYSFS_PATH))) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						closedir(dir);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* If kernel is 2.6.21 or newer, version is in
 | 
				
			||||||
 | 
						   /sys/module/acpi/parameters/acpica_version */
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						version = get_acpi_file("/sys/module/acpi/parameters/acpica_version");
 | 
				
			||||||
 | 
						if (version == NULL) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						num = atoi(version);
 | 
				
			||||||
 | 
						if (num < ACPI_VERSION) {
 | 
				
			||||||
 | 
							fprintf(stderr, "ACPI subsystem %s too is old, consider upgrading to %i.\n",
 | 
				
			||||||
 | 
									version, ACPI_VERSION);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						find_batteries();
 | 
				
			||||||
 | 
						find_ac_adapters();
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
						find_thermal();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ACPI_APM
 | 
				
			||||||
 | 
					/* Read ACPI info on a given power adapter and battery, and fill the passed
 | 
				
			||||||
 | 
					 * apm_info struct. */
 | 
				
			||||||
 | 
					int acpi_read (int battery, apm_info *info) {
 | 
				
			||||||
 | 
						char *buf, *state;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (acpi_batt_count == 0) {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_time = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
							acpi_batt_capacity[battery] = 0;
 | 
				
			||||||
 | 
							/* Where else would the power come from, eh? ;-) */
 | 
				
			||||||
 | 
							info->ac_line_status = 1;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Internally it's zero indexed. */
 | 
				
			||||||
 | 
						battery--;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						buf = get_acpi_file(acpi_batt_info[battery]);
 | 
				
			||||||
 | 
						if (buf == NULL) {
 | 
				
			||||||
 | 
							fprintf(stderr, "unable to read %s\n", acpi_batt_info[battery]);
 | 
				
			||||||
 | 
							perror("read");
 | 
				
			||||||
 | 
							exit(1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->ac_line_status = 0;
 | 
				
			||||||
 | 
						info->battery_flags = 0;
 | 
				
			||||||
 | 
						info->using_minutes = 1;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Work out if the battery is present, and what percentage of full
 | 
				
			||||||
 | 
						 * it is and how much time is left. */
 | 
				
			||||||
 | 
						if (strcmp(scan_acpi_value(buf, acpi_labels[label_present]), "1") == 0) {
 | 
				
			||||||
 | 
							int pcap = scan_acpi_num(buf, acpi_labels[label_remaining_capacity]);
 | 
				
			||||||
 | 
							int rate = scan_acpi_num(buf, acpi_labels[label_present_rate]);
 | 
				
			||||||
 | 
							if (rate) {
 | 
				
			||||||
 | 
								/* time remaining = (current_capacity / discharge rate) */
 | 
				
			||||||
 | 
								info->battery_time = (float) pcap / (float) rate * 60;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								char *rate_s = scan_acpi_value(buf, acpi_labels[label_present_rate]);
 | 
				
			||||||
 | 
								if (! rate_s) {
 | 
				
			||||||
 | 
									/* Time remaining unknown. */
 | 
				
			||||||
 | 
									info->battery_time = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									/* a zero or unknown in the file; time 
 | 
				
			||||||
 | 
									 * unknown so use a negative one to
 | 
				
			||||||
 | 
									 * indicate this */
 | 
				
			||||||
 | 
									info->battery_time = -1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							state = scan_acpi_value(buf, acpi_labels[label_charging_state]);
 | 
				
			||||||
 | 
							if (state) {
 | 
				
			||||||
 | 
								if (state[0] == 'D') { /* discharging */
 | 
				
			||||||
 | 
									info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
									/* Expensive ac power check used here
 | 
				
			||||||
 | 
									 * because AC power might be on even if a
 | 
				
			||||||
 | 
									 * battery is discharging in some cases. */
 | 
				
			||||||
 | 
									info->ac_line_status = on_ac_power();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (state[0] == 'C' && state[1] == 'h') { /* charging */
 | 
				
			||||||
 | 
									info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
									info->ac_line_status = 1;
 | 
				
			||||||
 | 
									info->battery_flags = info->battery_flags | BATTERY_FLAGS_CHARGING;
 | 
				
			||||||
 | 
									if (rate)
 | 
				
			||||||
 | 
										info->battery_time = -1 * (float) (acpi_batt_capacity[battery] - pcap) / (float) rate * 60;
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										info->battery_time = 0;
 | 
				
			||||||
 | 
									if (abs(info->battery_time) < 0.5)
 | 
				
			||||||
 | 
										info->battery_time = 0;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (state[0] == 'F') { /* full */
 | 
				
			||||||
 | 
									/* charged, on ac power */
 | 
				
			||||||
 | 
									info->battery_status = BATTERY_STATUS_HIGH;
 | 
				
			||||||
 | 
									info->ac_line_status = 1;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (state[0] == 'C') { /* not charging, so must be critical */
 | 
				
			||||||
 | 
									info->battery_status = BATTERY_STATUS_CRITICAL;
 | 
				
			||||||
 | 
									/* Expensive ac power check used here
 | 
				
			||||||
 | 
									 * because AC power might be on even if a
 | 
				
			||||||
 | 
									 * battery is critical in some cases. */
 | 
				
			||||||
 | 
									info->ac_line_status = on_ac_power();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else if (state[0] == 'U') { /* unknown */
 | 
				
			||||||
 | 
									info->ac_line_status = on_ac_power();
 | 
				
			||||||
 | 
									int current = scan_acpi_num(buf, acpi_labels[label_present_rate]);
 | 
				
			||||||
 | 
									if (info->ac_line_status) {
 | 
				
			||||||
 | 
										if (current == 0)
 | 
				
			||||||
 | 
											info->battery_status = BATTERY_STATUS_HIGH;
 | 
				
			||||||
 | 
										else
 | 
				
			||||||
 | 
											info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									fprintf(stderr, "unknown battery state: %s\n", state);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								/* Battery state unknown. */
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (acpi_batt_capacity[battery] == 0) {
 | 
				
			||||||
 | 
								/* The battery was absent, and now is present.
 | 
				
			||||||
 | 
								 * Well, it might be a different battery. So
 | 
				
			||||||
 | 
								 * re-probe the battery. */
 | 
				
			||||||
 | 
								/* NOTE that this invalidates buf. No accesses of
 | 
				
			||||||
 | 
								 * buf below this point! */
 | 
				
			||||||
 | 
								acpi_batt_capacity[battery] = get_acpi_batt_capacity(battery);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (pcap > acpi_batt_capacity[battery]) {
 | 
				
			||||||
 | 
								/* Battery is somehow charged to greater than max
 | 
				
			||||||
 | 
								 * capacity. Rescan for a new max capacity. */
 | 
				
			||||||
 | 
								find_batteries();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (pcap && acpi_batt_capacity[battery]) {
 | 
				
			||||||
 | 
								info->battery_percentage = 100 * pcap / acpi_batt_capacity[battery];
 | 
				
			||||||
 | 
								if (info->battery_percentage > 100)
 | 
				
			||||||
 | 
									info->battery_percentage = 100;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								info->battery_percentage = -1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_time = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
							acpi_batt_capacity[battery] = 0;
 | 
				
			||||||
 | 
							if (acpi_batt_count == 0) {
 | 
				
			||||||
 | 
								/* Where else would the power come from, eh? ;-) */
 | 
				
			||||||
 | 
								info->ac_line_status = 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								/* Expensive ac power check. */
 | 
				
			||||||
 | 
								info->ac_line_status = on_ac_power();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										67
									
								
								wmbattery/acpi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								wmbattery/acpi.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,67 @@
 | 
				
			||||||
 | 
					/* 
 | 
				
			||||||
 | 
					 * A not-yet-general-purpose ACPI library, by Joey Hess <joey@kitenet.net>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Define ACPI_THERMAL to make the library support finding info about thermal
 | 
				
			||||||
 | 
					 * sources. */
 | 
				
			||||||
 | 
					//#define ACPI_THERMAL 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Define ACPI_APM to get the acpi_read function, which is like apm_read. */
 | 
				
			||||||
 | 
					//#define ACPI_APM 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The lowest version of ACPI proc files supported. */
 | 
				
			||||||
 | 
					#define ACPI_VERSION 20011018
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The number of acpi items of each class supported. */
 | 
				
			||||||
 | 
					#define ACPI_MAXITEM 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int acpi_supported (void);
 | 
				
			||||||
 | 
					#ifdef ACPI_APM
 | 
				
			||||||
 | 
					int acpi_read (int battery, apm_info *info);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					char *get_acpi_file (const char *file);
 | 
				
			||||||
 | 
					int scan_acpi_num (const char *buf, const char *key);
 | 
				
			||||||
 | 
					char *scan_acpi_value (const char *buf, const char *key);
 | 
				
			||||||
 | 
					char *get_acpi_value (const char *file, const char *key);
 | 
				
			||||||
 | 
					int get_acpi_batt_capacity(int battery);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int acpi_batt_count;
 | 
				
			||||||
 | 
					/* Filenames of the battery info files for each system battery. */
 | 
				
			||||||
 | 
					extern char acpi_batt_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					/* Filenames of the battery status files for each system battery. */
 | 
				
			||||||
 | 
					extern char acpi_batt_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					/* Stores battery capacity, or 0 if the battery is absent. */
 | 
				
			||||||
 | 
					extern int acpi_batt_capacity[ACPI_MAXITEM];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern int acpi_ac_count;
 | 
				
			||||||
 | 
					extern char acpi_ac_adapter_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					extern char acpi_ac_adapter_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
					extern int acpi_thermal_count;
 | 
				
			||||||
 | 
					extern char acpi_thermal_info[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					extern char acpi_thermal_status[ACPI_MAXITEM][128];
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This enum is used to index into the acpi_labels */
 | 
				
			||||||
 | 
					enum acpi_labels_items {
 | 
				
			||||||
 | 
						label_info,
 | 
				
			||||||
 | 
						label_status,
 | 
				
			||||||
 | 
						label_battery,
 | 
				
			||||||
 | 
						label_ac_adapter,
 | 
				
			||||||
 | 
						label_capacity,
 | 
				
			||||||
 | 
						label_design_capacity,
 | 
				
			||||||
 | 
						label_present,
 | 
				
			||||||
 | 
						label_remaining_capacity,
 | 
				
			||||||
 | 
						label_present_rate,
 | 
				
			||||||
 | 
						label_charging_state,
 | 
				
			||||||
 | 
					#if ACPI_THERMAL
 | 
				
			||||||
 | 
						label_thermal,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						label_ac_state,
 | 
				
			||||||
 | 
						label_last_full_capacity,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* This is set to point to a list of strings used for the given acpi
 | 
				
			||||||
 | 
					 *  * version. */
 | 
				
			||||||
 | 
					extern char *acpi_labels[];
 | 
				
			||||||
							
								
								
									
										27
									
								
								wmbattery/apm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								wmbattery/apm.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					#include <apm.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Symbolic constants for apm may be in system apm.h, or may not. */
 | 
				
			||||||
 | 
					#ifndef AC_LINE_STATUS_ON
 | 
				
			||||||
 | 
					#define AC_LINE_STATUS_OFF      (0)
 | 
				
			||||||
 | 
					#define AC_LINE_STATUS_ON       (1)
 | 
				
			||||||
 | 
					#define AC_LINE_STATUS_BACKUP   (2)
 | 
				
			||||||
 | 
					#define AC_LINE_STATUS_UNKNOWN  (0xff)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_HIGH     (0)
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_LOW      (1)
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_CRITICAL (2)
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_CHARGING (3)
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_ABSENT   (4)
 | 
				
			||||||
 | 
					#define BATTERY_STATUS_UNKNOWN  (0xff)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BATTERY_FLAGS_HIGH      (0x1)
 | 
				
			||||||
 | 
					#define BATTERY_FLAGS_LOW       (0x2)
 | 
				
			||||||
 | 
					#define BATTERY_FLAGS_CRITICAL  (0x4)
 | 
				
			||||||
 | 
					#define BATTERY_FLAGS_CHARGING  (0x8)
 | 
				
			||||||
 | 
					#define BATTERY_FLAGS_ABSENT    (0x80)
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					#define BATTERY_PERCENTAGE_UNKNOWN  (-1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define BATTERY_TIME_UNKNOWN        (-1)
 | 
				
			||||||
 | 
					#endif /* AC_LINE_STATUS_ON */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										250
									
								
								wmbattery/autoconf/install-sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										250
									
								
								wmbattery/autoconf/install-sh
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,250 @@
 | 
				
			||||||
 | 
					#! /bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# install - install a program, script, or datafile
 | 
				
			||||||
 | 
					# This comes from X11R5 (mit/util/scripts/install.sh).
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright 1991 by the Massachusetts Institute of Technology
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Permission to use, copy, modify, distribute, and sell this software and its
 | 
				
			||||||
 | 
					# documentation for any purpose is hereby granted without fee, provided that
 | 
				
			||||||
 | 
					# the above copyright notice appear in all copies and that both that
 | 
				
			||||||
 | 
					# copyright notice and this permission notice appear in supporting
 | 
				
			||||||
 | 
					# documentation, and that the name of M.I.T. not be used in advertising or
 | 
				
			||||||
 | 
					# publicity pertaining to distribution of the software without specific,
 | 
				
			||||||
 | 
					# written prior permission.  M.I.T. makes no representations about the
 | 
				
			||||||
 | 
					# suitability of this software for any purpose.  It is provided "as is"
 | 
				
			||||||
 | 
					# without express or implied warranty.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Calling this script install-sh is preferred over install.sh, to prevent
 | 
				
			||||||
 | 
					# `make' implicit rules from creating a file called install from it
 | 
				
			||||||
 | 
					# when there is no Makefile.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This script is compatible with the BSD install script, but was written
 | 
				
			||||||
 | 
					# from scratch.  It can only install one file at a time, a restriction
 | 
				
			||||||
 | 
					# shared with many OS's install programs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# set DOITPROG to echo to test this script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Don't use :- since 4.3BSD and earlier shells don't like it.
 | 
				
			||||||
 | 
					doit="${DOITPROG-}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# put in absolute paths if you don't have them in your path; or use env. vars.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mvprog="${MVPROG-mv}"
 | 
				
			||||||
 | 
					cpprog="${CPPROG-cp}"
 | 
				
			||||||
 | 
					chmodprog="${CHMODPROG-chmod}"
 | 
				
			||||||
 | 
					chownprog="${CHOWNPROG-chown}"
 | 
				
			||||||
 | 
					chgrpprog="${CHGRPPROG-chgrp}"
 | 
				
			||||||
 | 
					stripprog="${STRIPPROG-strip}"
 | 
				
			||||||
 | 
					rmprog="${RMPROG-rm}"
 | 
				
			||||||
 | 
					mkdirprog="${MKDIRPROG-mkdir}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					transformbasename=""
 | 
				
			||||||
 | 
					transform_arg=""
 | 
				
			||||||
 | 
					instcmd="$mvprog"
 | 
				
			||||||
 | 
					chmodcmd="$chmodprog 0755"
 | 
				
			||||||
 | 
					chowncmd=""
 | 
				
			||||||
 | 
					chgrpcmd=""
 | 
				
			||||||
 | 
					stripcmd=""
 | 
				
			||||||
 | 
					rmcmd="$rmprog -f"
 | 
				
			||||||
 | 
					mvcmd="$mvprog"
 | 
				
			||||||
 | 
					src=""
 | 
				
			||||||
 | 
					dst=""
 | 
				
			||||||
 | 
					dir_arg=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while [ x"$1" != x ]; do
 | 
				
			||||||
 | 
					    case $1 in
 | 
				
			||||||
 | 
						-c) instcmd="$cpprog"
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-d) dir_arg=true
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-m) chmodcmd="$chmodprog $2"
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-o) chowncmd="$chownprog $2"
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-g) chgrpcmd="$chgrpprog $2"
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-s) stripcmd="$stripprog"
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-t=*) transformarg=`echo $1 | sed 's/-t=//'`
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						*)  if [ x"$src" = x ]
 | 
				
			||||||
 | 
						    then
 | 
				
			||||||
 | 
							src=$1
 | 
				
			||||||
 | 
						    else
 | 
				
			||||||
 | 
							# this colon is to work around a 386BSD /bin/sh bug
 | 
				
			||||||
 | 
							:
 | 
				
			||||||
 | 
							dst=$1
 | 
				
			||||||
 | 
						    fi
 | 
				
			||||||
 | 
						    shift
 | 
				
			||||||
 | 
						    continue;;
 | 
				
			||||||
 | 
					    esac
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ x"$src" = x ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
						echo "install:	no input file specified"
 | 
				
			||||||
 | 
						exit 1
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						true
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ x"$dir_arg" != x ]; then
 | 
				
			||||||
 | 
						dst=$src
 | 
				
			||||||
 | 
						src=""
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if [ -d $dst ]; then
 | 
				
			||||||
 | 
							instcmd=:
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							instcmd=mkdir
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
 | 
				
			||||||
 | 
					# might cause directories to be created, which would be especially bad 
 | 
				
			||||||
 | 
					# if $src (and thus $dsttmp) contains '*'.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ -f $src -o -d $src ]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							true
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							echo "install:  $src does not exist"
 | 
				
			||||||
 | 
							exit 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if [ x"$dst" = x ]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							echo "install:	no destination specified"
 | 
				
			||||||
 | 
							exit 1
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							true
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If destination is a directory, append the input filename; if your system
 | 
				
			||||||
 | 
					# does not like double slashes in filenames, you may need to add some logic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ -d $dst ]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							dst="$dst"/`basename $src`
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							true
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## this sed command emulates the dirname command
 | 
				
			||||||
 | 
					dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make sure that the destination directory exists.
 | 
				
			||||||
 | 
					#  this part is taken from Noah Friedman's mkinstalldirs script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Skip lots of stat calls in the usual case.
 | 
				
			||||||
 | 
					if [ ! -d "$dstdir" ]; then
 | 
				
			||||||
 | 
					defaultIFS='	
 | 
				
			||||||
 | 
					'
 | 
				
			||||||
 | 
					IFS="${IFS-${defaultIFS}}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					oIFS="${IFS}"
 | 
				
			||||||
 | 
					# Some sh's can't handle IFS=/ for some reason.
 | 
				
			||||||
 | 
					IFS='%'
 | 
				
			||||||
 | 
					set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
 | 
				
			||||||
 | 
					IFS="${oIFS}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pathcomp=''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while [ $# -ne 0 ] ; do
 | 
				
			||||||
 | 
						pathcomp="${pathcomp}${1}"
 | 
				
			||||||
 | 
						shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ ! -d "${pathcomp}" ] ;
 | 
				
			||||||
 | 
					        then
 | 
				
			||||||
 | 
							$mkdirprog "${pathcomp}"
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							true
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pathcomp="${pathcomp}/"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ x"$dir_arg" != x ]
 | 
				
			||||||
 | 
					then
 | 
				
			||||||
 | 
						$doit $instcmd $dst &&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
 | 
				
			||||||
 | 
						if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
 | 
				
			||||||
 | 
						if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
 | 
				
			||||||
 | 
						if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If we're going to rename the final executable, determine the name now.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ x"$transformarg" = x ] 
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							dstfile=`basename $dst`
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							dstfile=`basename $dst $transformbasename | 
 | 
				
			||||||
 | 
								sed $transformarg`$transformbasename
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# don't allow the sed command to completely eliminate the filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ x"$dstfile" = x ] 
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							dstfile=`basename $dst`
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							true
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make a temp file name in the proper directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dsttmp=$dstdir/#inst.$$#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Move or copy the file name to the temp name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$doit $instcmd $src $dsttmp &&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						trap "rm -f ${dsttmp}" 0 &&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# and set any options; do chmod last to preserve setuid bits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If any of these fail, we abort the whole thing.  If we want to
 | 
				
			||||||
 | 
					# ignore errors from any of these, just make sure not to ignore
 | 
				
			||||||
 | 
					# errors from the above "$doit $instcmd $src $dsttmp" command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
 | 
				
			||||||
 | 
						if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
 | 
				
			||||||
 | 
						if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
 | 
				
			||||||
 | 
						if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Now rename the file to the real destination.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$doit $rmcmd -f $dstdir/$dstfile &&
 | 
				
			||||||
 | 
						$doit $mvcmd $dsttmp $dstdir/$dstfile 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fi &&
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exit 0
 | 
				
			||||||
							
								
								
									
										21
									
								
								wmbattery/autoconf/makeinfo.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								wmbattery/autoconf/makeinfo.in
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					# Info for make, this will be preprocessed by autoconf.
 | 
				
			||||||
 | 
					bindir		= @bindir@
 | 
				
			||||||
 | 
					exec_prefix 	= @exec_prefix@
 | 
				
			||||||
 | 
					icondir		= @datadir@/icons/wmbattery
 | 
				
			||||||
 | 
					man1dir		= @mandir@/man1
 | 
				
			||||||
 | 
					prefix		= @prefix@
 | 
				
			||||||
 | 
					srcdir		= @srcdir@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CC		= @CC@
 | 
				
			||||||
 | 
					CFLAGS		= @CFLAGS@ -Wall -DACPI_APM
 | 
				
			||||||
 | 
					CPPFLAGS	= @CPPFLAGS@ -DICONDIR=\"$(icondir)\"
 | 
				
			||||||
 | 
					INSTALL		= @INSTALL@
 | 
				
			||||||
 | 
					INSTALL_DATA	= @INSTALL_DATA@
 | 
				
			||||||
 | 
					INSTALL_PROGRAM	= @INSTALL_PROGRAM@
 | 
				
			||||||
 | 
					LDFLAGS		= @LDFLAGS@
 | 
				
			||||||
 | 
					LIBS		= @LIBS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#remove hal support
 | 
				
			||||||
 | 
					#USE_HAL		= 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USE_UPOWER = 1
 | 
				
			||||||
							
								
								
									
										19
									
								
								wmbattery/battery_blink.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								wmbattery/battery_blink.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * battery_blink_xpm[] = {
 | 
				
			||||||
 | 
					"25 13 3 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #000049244103",
 | 
				
			||||||
 | 
					"X	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					" .....................   ",
 | 
				
			||||||
 | 
					"..                   ..  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".    ...   ...   X    .  ",
 | 
				
			||||||
 | 
					". . .   . .   . X X X ...",
 | 
				
			||||||
 | 
					". . .   . .   .  X X  ...",
 | 
				
			||||||
 | 
					".    ...   ...    X   ...",
 | 
				
			||||||
 | 
					". . .   . .   .  X X  ...",
 | 
				
			||||||
 | 
					". . .   . .   . X X X ...",
 | 
				
			||||||
 | 
					".    ...   ...     .  .  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					"..                   ..  ",
 | 
				
			||||||
 | 
					" .....................   "};
 | 
				
			||||||
							
								
								
									
										19
									
								
								wmbattery/battery_high.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								wmbattery/battery_high.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * battery_high_xpm[] = {
 | 
				
			||||||
 | 
					"25 13 3 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					" .....................   ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".    XXX   XXX   .    .  ",
 | 
				
			||||||
 | 
					". X X   X X   X . . . ...",
 | 
				
			||||||
 | 
					". X X   X X   X  . .  ...",
 | 
				
			||||||
 | 
					".    XXX   XXX    .   ...",
 | 
				
			||||||
 | 
					". X X   X X   X  . .  ...",
 | 
				
			||||||
 | 
					". X X   X X   X . . . ...",
 | 
				
			||||||
 | 
					".    XXX   XXX     .  .  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					" .....................   "};
 | 
				
			||||||
							
								
								
									
										20
									
								
								wmbattery/battery_low.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								wmbattery/battery_low.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * battery_low_xpm[] = {
 | 
				
			||||||
 | 
					"25 13 4 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #FFFF00000000",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					" .....................   ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".    XXX   XXX   o    .  ",
 | 
				
			||||||
 | 
					". X X   X X   X o o o ...",
 | 
				
			||||||
 | 
					". X X   X X   X  o o  ...",
 | 
				
			||||||
 | 
					".    XXX   XXX    o   ...",
 | 
				
			||||||
 | 
					". X X   X X   X  o o  ...",
 | 
				
			||||||
 | 
					". X X   X X   X o o o ...",
 | 
				
			||||||
 | 
					".    XXX   XXX     o  .  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					" .....................   "};
 | 
				
			||||||
							
								
								
									
										20
									
								
								wmbattery/battery_medium.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								wmbattery/battery_medium.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * battery_medium_xpm[] = {
 | 
				
			||||||
 | 
					"25 13 4 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #FFFFFFFF0000",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					" .....................   ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".    XXX   XXX   o    .  ",
 | 
				
			||||||
 | 
					". X X   X X   X o o o ...",
 | 
				
			||||||
 | 
					". X X   X X   X  o o  ...",
 | 
				
			||||||
 | 
					".    XXX   XXX    o   ...",
 | 
				
			||||||
 | 
					". X X   X X   X  o o  ...",
 | 
				
			||||||
 | 
					". X X   X X   X o o o ...",
 | 
				
			||||||
 | 
					".    XXX   XXX     o  .  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".X                   X.  ",
 | 
				
			||||||
 | 
					" .....................   "};
 | 
				
			||||||
							
								
								
									
										18
									
								
								wmbattery/battery_none.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								wmbattery/battery_none.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * battery_none_xpm[] = {
 | 
				
			||||||
 | 
					"25 13 2 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #000049244103",
 | 
				
			||||||
 | 
					" .....................   ",
 | 
				
			||||||
 | 
					"..                   ..  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					".    ...   ...   .    .  ",
 | 
				
			||||||
 | 
					". . .   . .   . . . . ...",
 | 
				
			||||||
 | 
					". . .   . .   .  . .  ...",
 | 
				
			||||||
 | 
					".    ...   ...    .   ...",
 | 
				
			||||||
 | 
					". . .   . .   .  . .  ...",
 | 
				
			||||||
 | 
					". . .   . .   . . . . ...",
 | 
				
			||||||
 | 
					".    ...   ...     .  .  ",
 | 
				
			||||||
 | 
					".                     .  ",
 | 
				
			||||||
 | 
					"..                   ..  ",
 | 
				
			||||||
 | 
					" .....................   "};
 | 
				
			||||||
							
								
								
									
										17
									
								
								wmbattery/bigfont.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								wmbattery/bigfont.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * bigfont_xpm[] = {
 | 
				
			||||||
 | 
					"84 9 5 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #104079E779E7",
 | 
				
			||||||
 | 
					"O	c #18618A288617",
 | 
				
			||||||
 | 
					" ....   XXXXo o....O o....o oXXXXo o....o o....O o....o o....O o....O         XXXX  ",
 | 
				
			||||||
 | 
					".    . X    . X    . X    . .    . .    X .    X X    . .    . .    .  XX    X    X ",
 | 
				
			||||||
 | 
					".    . X    . X    . X    . .    . .    X .    X X    . .    . .    .  XX    X    X ",
 | 
				
			||||||
 | 
					".    . X    . X    . X    . .    . .    X .    X X    . .    . .    .        X    X ",
 | 
				
			||||||
 | 
					"oXXXXo  XXXXo o....o o....o o....o o....o o....o  XXXXo o....o o....o        o....o ",
 | 
				
			||||||
 | 
					".    . X    . .    X X    . X    . X    . .    . X    . .    . X    .        X    X ",
 | 
				
			||||||
 | 
					".    . X    . .    X X    . X    . X    . .    . X    . .    . X    .  XX    X    X ",
 | 
				
			||||||
 | 
					".    . X    . .    X X    . X    . X    . .    . X    . .    . X    .  XX    X    X ",
 | 
				
			||||||
 | 
					" ....   XXXXo o....o o....o  XXXXo o....o o....o  XXXXo o....o o....o         XXXX  "};
 | 
				
			||||||
							
								
								
									
										19
									
								
								wmbattery/charging.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								wmbattery/charging.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char *charging[] = {
 | 
				
			||||||
 | 
					/* width height num_colors chars_per_pixel */
 | 
				
			||||||
 | 
					"    15     9        3            1",
 | 
				
			||||||
 | 
					/* colors */
 | 
				
			||||||
 | 
					". c #202020",
 | 
				
			||||||
 | 
					"# c #004941",
 | 
				
			||||||
 | 
					"a c #20b2ae",
 | 
				
			||||||
 | 
					/* pixels */
 | 
				
			||||||
 | 
					"........#a.....",
 | 
				
			||||||
 | 
					".......#aaa#...",
 | 
				
			||||||
 | 
					".......aaa#aa#.",
 | 
				
			||||||
 | 
					"......#aa#..#aa",
 | 
				
			||||||
 | 
					"......aaa......",
 | 
				
			||||||
 | 
					"aa#..#aa#......",
 | 
				
			||||||
 | 
					".#aa#aaa.......",
 | 
				
			||||||
 | 
					"...#aaa#.......",
 | 
				
			||||||
 | 
					"....#a#........"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										9
									
								
								wmbattery/config.h.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								wmbattery/config.h.in
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					#ifndef CONFIG_H
 | 
				
			||||||
 | 
					#define CONFIG_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* What system header files can I use? */
 | 
				
			||||||
 | 
					#undef HAVE_GETOPT_H
 | 
				
			||||||
 | 
					#undef HAVE_SYS_FILE_H
 | 
				
			||||||
 | 
					#undef HAVE_SYS_IOCTL_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										44
									
								
								wmbattery/configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								wmbattery/configure.ac
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,44 @@
 | 
				
			||||||
 | 
					dnl Process this file with autoconf to produce a configure script.
 | 
				
			||||||
 | 
					AC_INIT(wmbattery.c)
 | 
				
			||||||
 | 
					AC_CONFIG_HEADER(config.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AC_CONFIG_AUX_DIR(autoconf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Checks for programs.
 | 
				
			||||||
 | 
					AC_PROG_CC
 | 
				
			||||||
 | 
					AC_PROG_INSTALL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Locate X11.
 | 
				
			||||||
 | 
					AC_PATH_X
 | 
				
			||||||
 | 
					if test "x${no_x}" = "xyes"; then
 | 
				
			||||||
 | 
					   AC_MSG_ERROR(Can't find X windows include files and libraries)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if test "x${x_includes}" != "x"; then
 | 
				
			||||||
 | 
					   CPPFLAGS="$CPPFLAGS -I`echo ${x_includes}`"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					if test "x${x_libraries}" != "x"; then
 | 
				
			||||||
 | 
					   LIBS="$LIBS -L`echo ${x_libraries}`"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Checks for libraries.
 | 
				
			||||||
 | 
					AC_CHECK_LIB(X11, XOpenDisplay)
 | 
				
			||||||
 | 
					AC_CHECK_LIB(Xext, XShapeCombineMask)
 | 
				
			||||||
 | 
					AC_CHECK_LIB(Xpm, XpmReadFileToPixmap)
 | 
				
			||||||
 | 
					AC_CHECK_LIB(apm, apm_read)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Checks for header files.
 | 
				
			||||||
 | 
					AC_HEADER_STDC
 | 
				
			||||||
 | 
					AC_CHECK_HEADERS(X11/xpm.h)
 | 
				
			||||||
 | 
					AC_CHECK_HEADERS(X11/extensions/shape.h)
 | 
				
			||||||
 | 
					AC_CHECK_HEADERS(getopt.h)
 | 
				
			||||||
 | 
					AC_CHECK_HEADERS(apm.h)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Checks for typedefs, structures, and compiler characteristics.
 | 
				
			||||||
 | 
					AC_C_CONST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dnl Checks for library functions.
 | 
				
			||||||
 | 
					AC_PROG_GCC_TRADITIONAL
 | 
				
			||||||
 | 
					AC_FUNC_VPRINTF
 | 
				
			||||||
 | 
					AC_CHECK_FUNCS(strdup)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					AC_OUTPUT(makeinfo:autoconf/makeinfo.in)
 | 
				
			||||||
							
								
								
									
										546
									
								
								wmbattery/debian/changelog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								wmbattery/debian/changelog
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,546 @@
 | 
				
			||||||
 | 
					wmbattery (2.44) unstable; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Better AC detection.
 | 
				
			||||||
 | 
					  * Support times with upower and acpi (Closes: #740885).
 | 
				
			||||||
 | 
					  * Use the latest upower API (Closes: #748935).
 | 
				
			||||||
 | 
					  * Fix upower detection.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Andrew Shadura <andrewsh@debian.org>  Fri, 18 Jul 2014 01:14:49 +0200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.43) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Orphaned the package. It will probably be removed as it does not work with
 | 
				
			||||||
 | 
					    current kernels.
 | 
				
			||||||
 | 
					  * Added -i to display as icon. Thanks, Tovar Closes: #732398
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 27 May 2014 16:01:34 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.42) unstable; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Stop building with flash-in-the-pan HAL. Instead update acpi
 | 
				
			||||||
 | 
					    interface to use /sys/class/power_supply.
 | 
				
			||||||
 | 
					    Note that this needs acpica_version 20011018.
 | 
				
			||||||
 | 
					    Closes: #613166
 | 
				
			||||||
 | 
					    (Patch developed by Andrew Shadura.)
 | 
				
			||||||
 | 
					  * Also added support for upower, which is used by default,
 | 
				
			||||||
 | 
					    to avoid chasing kernel sysfs changes.
 | 
				
			||||||
 | 
					    (Patch developed by Andrew Shadura.)
 | 
				
			||||||
 | 
					    Closes: #727102
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu, 05 Dec 2013 15:29:41 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.41) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Accumulated packaging modernizations. Closes: #666370
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 30 Mar 2012 10:20:17 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.40) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add -s option which can be used to ignore fluctuations
 | 
				
			||||||
 | 
					    in reported battery charge (as seen on the EeePC) when
 | 
				
			||||||
 | 
					    using -e. Closes: #527870 (Joseph Huang)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat, 09 May 2009 16:53:10 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.39) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Use debhelper v7; rules file minimisation.
 | 
				
			||||||
 | 
					  * Depend on hal since /proc/acpi is gone from the default kernels now.
 | 
				
			||||||
 | 
					    Closes: #491099
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 22 Jul 2008 00:23:47 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.38) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Magic header file reordering to work around the disgusting
 | 
				
			||||||
 | 
					    linux-libc-dev/libc headers conflicts (#435700). Closes: #463811
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 27 Feb 2008 15:08:53 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.37) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Support reconnecting to dbus if it's restarted. (AKA giant dbus-PITA)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 20 Feb 2008 22:44:00 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.36) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Support reconnecting to hal if the connection is closed, as happens
 | 
				
			||||||
 | 
					    if the hal is restarted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 20 Feb 2008 22:29:00 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.35) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Don't spew error messages if optional hal properties are not available.
 | 
				
			||||||
 | 
					  * Only check to see if a battery is charging if hal reports there is AC
 | 
				
			||||||
 | 
					    power. This is perhaps not 100% correct in systems with multiple batteries
 | 
				
			||||||
 | 
					    that may cross-charge when off AC, but it's faster and it avoids bugs in
 | 
				
			||||||
 | 
					    hal (#463740).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat, 02 Feb 2008 17:28:37 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.34) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Bit the bullet, stopped trying to track the kernel's ever changing
 | 
				
			||||||
 | 
					    interfaces, and added support for querying battery information from hal.
 | 
				
			||||||
 | 
					    Support for the old kernel interfaces (APM, ACPI, etc) is still present,
 | 
				
			||||||
 | 
					    but to use new interfaces such 2.6.24's /sys/class/power_adapter, you'll
 | 
				
			||||||
 | 
					    have to have dbus and hal.
 | 
				
			||||||
 | 
					    Closes: #456247, #246641, #290712, #393616, #456248
 | 
				
			||||||
 | 
					  * Fix -e option.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 01 Feb 2008 21:36:39 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.33) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct issue with the statically allocated string returned by
 | 
				
			||||||
 | 
					    get_acpi_value that caused it to only look at last full capacity and never
 | 
				
			||||||
 | 
					    really at design capacity.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat, 22 Dec 2007 22:26:38 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.32) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Guard some divisions against division by zero. I've never seen that
 | 
				
			||||||
 | 
					    happen and can't reproduce it, but see #454766.
 | 
				
			||||||
 | 
					  * Merge acpi change from procmeter3: Limit string length when reading from
 | 
				
			||||||
 | 
					    /proc/.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 07 Dec 2007 14:56:41 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.31) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Further fix for my strange battery. If the present capacity is larger
 | 
				
			||||||
 | 
					    than the maximum capacity, rescan to figure out the new max capacity.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun, 02 Dec 2007 15:50:29 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.30) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * My new battery has a design capacity of 7800 mAh and yet its
 | 
				
			||||||
 | 
					    last full capacity was 9488, and its currently charged to 8540.
 | 
				
			||||||
 | 
					    Deal with this wonderful miracle^W^Wcrap hardware by taking the max
 | 
				
			||||||
 | 
					    of the design or last full capacities.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 23 Oct 2007 22:21:06 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.29) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Update to new menu policy.
 | 
				
			||||||
 | 
					  * The repository has moved from svn to git.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 19 Oct 2007 21:14:22 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.28) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Correct off-by-one in acpi.c
 | 
				
			||||||
 | 
					  * Put url to new web page in README.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 04 Jun 2007 16:44:03 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.27) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Minor bug fix to acpi code, don't skip over dotfiles.
 | 
				
			||||||
 | 
					  * Patch from Vincent Bernat adding support for 2.6.21, which changes
 | 
				
			||||||
 | 
					    yet again where the ACPI version number is stored. Closes: #423612
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 14 May 2007 14:23:09 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.26) unstable; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Add missing build dep on libxt-dev. Closes: #379247
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 25 Jul 2006 22:00:41 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.25) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Merge acpi.c changes for more robust AC power status from sleepd 1.3.0.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu, 30 Mar 2006 14:59:31 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.24) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Current policy.
 | 
				
			||||||
 | 
					  * Man page section fix.
 | 
				
			||||||
 | 
					  * Menu file move.
 | 
				
			||||||
 | 
					  * GPL update.
 | 
				
			||||||
 | 
					  * Remove configure script in distclean.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun, 18 Dec 2005 17:39:07 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.23) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * xlibs-dev transition
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 16 Dec 2005 14:54:25 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.22) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Fix acpi detection, the code to read /proc/acpi/info was not updated
 | 
				
			||||||
 | 
					    to the new cd-less code. Closes: #307278
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon,  2 May 2005 18:14:01 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.21) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Merge in changes from procmeter3's version of acpi.c, made by Andrew M.
 | 
				
			||||||
 | 
					    Bishop, that avoid the ugly chdir to /proc/acpi and add a bit of error
 | 
				
			||||||
 | 
					    checking. Now fully synced with procmeter3 3.4d.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat, 30 Apr 2005 22:58:44 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.20) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Patch from Kris Verbeeck to add a -a option to play an au file
 | 
				
			||||||
 | 
					    on low battery.
 | 
				
			||||||
 | 
					  * Document it in the man page.
 | 
				
			||||||
 | 
					  * Unicode dash fixes on man page.
 | 
				
			||||||
 | 
					  * Some indentation fixes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 24 Nov 2004 16:20:39 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.19) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Use the proper new-style acpi string when looking for ac adaptor status.
 | 
				
			||||||
 | 
					    Closes: #220039
 | 
				
			||||||
 | 
					  * Remove the hack I added for my old picturebook, as it causes bad results
 | 
				
			||||||
 | 
					    on systems that label a fully charged battery's charging rate as
 | 
				
			||||||
 | 
					    unknown and state as charging.
 | 
				
			||||||
 | 
					  * Base battery charge calculations for ACPI on design capacity, instead of
 | 
				
			||||||
 | 
					    last full capacity. Some batteries may exceed previous last full on 
 | 
				
			||||||
 | 
					    their next charging, and this also lets you see when you have a damaged
 | 
				
			||||||
 | 
					    battery that is not fully charging.
 | 
				
			||||||
 | 
					  * If acpi battery charging state is unknown, but the rate is 0,
 | 
				
			||||||
 | 
					    then the battery is charged and on AC power, and the unknown state can
 | 
				
			||||||
 | 
					    be ignored. Analysis and patch by "TeXitoi".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 17 Nov 2003 20:28:56 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.18) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Sort devices returned by readdir in acpi, since the order can be random.
 | 
				
			||||||
 | 
					    Closes: #204721
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 13 Aug 2003 01:45:55 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.17) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Make acpi code put -1 in the time remaining field if the "present rate"
 | 
				
			||||||
 | 
					    is 0. Closes: #204722
 | 
				
			||||||
 | 
					  * Enable internal time estimate code in this case.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 11 Aug 2003 17:21:17 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.16) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Another patch from Hugo Haas, this time it adds time-till-charged
 | 
				
			||||||
 | 
					    estimates for systems that lack them. The estimates are on by default,
 | 
				
			||||||
 | 
					    though they're only linear guesses and may not be accurate.
 | 
				
			||||||
 | 
					  * Display dimmed time estimate field if there is no estimate available.
 | 
				
			||||||
 | 
					  * -e switch renamed to -r and forces both estimates on.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  7 Aug 2003 16:41:37 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.15) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Patch from Hugo Haas <hugo@larve.net> to change when the icon is
 | 
				
			||||||
 | 
					    refreshed for less latency.
 | 
				
			||||||
 | 
					  * Patch from Hugo Haas to have wmbattery do its own time left estimates
 | 
				
			||||||
 | 
					    if that info is not available from the machine.
 | 
				
			||||||
 | 
					  * Add -r switch to force wmbattery to estimate the time left.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  3 Aug 2003 00:00:09 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.14) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Set the cutoff point for old acpi to 20020214 (was 20020208).
 | 
				
			||||||
 | 
					    Closes: #202083
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun, 20 Jul 2003 13:44:59 +0200
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.13) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Added support for ACPI version 20030109 (2.5 kernel), and generally
 | 
				
			||||||
 | 
					    support for changing ACPI strings across versions. Closes: #177249
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  6 Feb 2003 14:50:21 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.12) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Rebuild w/o /usr/doc link.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 15 Nov 2002 15:23:13 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.11) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Corrected inverted test to see if ac power is online, that was only called
 | 
				
			||||||
 | 
					    on 2 battery systems. Closes: #152356
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed, 10 Jul 2002 16:10:40 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.10) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Deal with acpi putting nothing but "Present: no" in the info file for the
 | 
				
			||||||
 | 
					    second battery of a thinkpad. This was with kernel 2.4.19-pre10.
 | 
				
			||||||
 | 
					    Closes: #149715
 | 
				
			||||||
 | 
					  * Moved DEB_BUILD_OPTIONS out of makeinfo.
 | 
				
			||||||
 | 
					  * Updated to new autoconf.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 11 Jun 2002 22:51:45 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.09) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Moved makefile stuff out of makeinfo, so it is just definitions.
 | 
				
			||||||
 | 
					  * Support DEB_BUILD_OPTIONS.
 | 
				
			||||||
 | 
					  * debhelper v4.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat,  1 Jun 2002 16:31:53 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.08) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Don't crash if there is a /proc/acpi/ with no status file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 31 May 2002 21:35:06 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.07) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Added symbolic apm info constants to "apm.h", in case they are
 | 
				
			||||||
 | 
					    not in the system <apm.h>.
 | 
				
			||||||
 | 
					  * Put $(LIBS) last at link time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 23 Apr 2002 11:49:16 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.06) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Deal with -1 time left from apm (no estimate).
 | 
				
			||||||
 | 
					  * Never dim colon, fixes display bug.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 22 Apr 2002 12:30:35 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.05) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * (acpi) don't display the rather wacky "- :0" on an almost full battery
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue,  9 Apr 2002 23:19:35 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.04) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Work around stupid ACPI output format  bug. Critical battery detection
 | 
				
			||||||
 | 
					    now works.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon,  8 Apr 2002 22:49:43 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.03) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Better error reporting.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  7 Apr 2002 22:57:17 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.02) unstable; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Improved acpi interface (also used for procmeter3 module now).
 | 
				
			||||||
 | 
					  * Fixed segfault on non-ACPI systems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  7 Apr 2002 17:48:41 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.01) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Corrected minus sign in bigfont to proper faux-lcd appearance. Also fixed
 | 
				
			||||||
 | 
					    offset slightly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri,  5 Apr 2002 23:34:38 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (2.00) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Added ACPI support, including battery change detection, and battery
 | 
				
			||||||
 | 
					    charging time countdown timer.
 | 
				
			||||||
 | 
					  * Added -w parameter to configure delay time.
 | 
				
			||||||
 | 
					  * Added -c and -l parameters to allow user control of battery low/critical
 | 
				
			||||||
 | 
					    percentages.
 | 
				
			||||||
 | 
					  * Use constant defs from apm.h instead of nasty hardcoded numbers.
 | 
				
			||||||
 | 
					  * Made -Wall clean.
 | 
				
			||||||
 | 
					  * Reorg.
 | 
				
			||||||
 | 
					  * Removed -s option, just fall back to SPIC if ACPI and APM are not
 | 
				
			||||||
 | 
					    available.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri,  5 Apr 2002 12:53:18 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.23) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Added support for querying for battery status via the sonypi driver, for
 | 
				
			||||||
 | 
					    sony laptops that do not have apm support. This is a stopgap until linux
 | 
				
			||||||
 | 
					    gets full ACPI support.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  4 Apr 2002 10:25:31 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.22) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Converted to use libapm, instead of the hacked up old version of it
 | 
				
			||||||
 | 
					    used before. This probably breaks wmbattery on the BSD's, for now. The
 | 
				
			||||||
 | 
					    correct fix for the BSD's will be to get support for their apm
 | 
				
			||||||
 | 
					    implementations into libapm. To that end, I have filed a bug with all the
 | 
				
			||||||
 | 
					    code I ripped out.
 | 
				
			||||||
 | 
					  * The -f option also had to be removed. If libapm does not work right on
 | 
				
			||||||
 | 
					    systems that needed that flag it's probably a bug in the library.
 | 
				
			||||||
 | 
					  * Closes: #100027
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun, 24 Feb 2002 12:47:53 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.21) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Typo, Closes: #125485
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 17 Dec 2001 21:41:52 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.20) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Still show percent sign when blinking low. Closes: #123183
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  9 Dec 2001 22:44:17 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.19) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Used two more grey's in the transition between shadow and highlight
 | 
				
			||||||
 | 
					    in the dial. Looks a bit better.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Wed,  7 Nov 2001 22:35:37 -0500
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.18) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Autoconf 2.50 demands an absolute --mandir=
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu, 24 May 2001 15:04:23 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.17) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Patch from Edward Betts <edward@debian.org> to make the icon redraw
 | 
				
			||||||
 | 
					    immediatly when it gets an expose event. The patch also lowers the CPU
 | 
				
			||||||
 | 
					    time used as the icon is not needlessly redrawn every second. Thanks
 | 
				
			||||||
 | 
					    Edward! Closes: #97779
 | 
				
			||||||
 | 
					  * Battery blink fixup. (I seem to have inexplicably lost the changelog
 | 
				
			||||||
 | 
					    and version involving making the battery blink red on and off when the
 | 
				
			||||||
 | 
					    status is critical -- I did this recently because the eye tends to
 | 
				
			||||||
 | 
					    notice the motion).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu, 17 May 2001 13:16:55 -0400
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.16) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Another patch from Kevin, which allows removal of the
 | 
				
			||||||
 | 
					    config.{sub,guess} files and does smarter detection.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon,  5 Mar 2001 19:49:36 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.15) unstable; urgency=medium
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Fixed icon search path.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Tue, 27 Feb 2001 18:00:44 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.14) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * OpenBSD port by Kevin Christen <christen@ix.netcom.com>
 | 
				
			||||||
 | 
					  * Uses autoconf.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 26 Feb 2001 22:06:55 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.13) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Added support for using files other than /proc/apm, via a -f switch.
 | 
				
			||||||
 | 
					    (See bug #69585)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 21 Aug 2000 11:52:21 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.12) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Use /usr/share/icons/wmbattery, not /usr/X11R6/share. Sheesh. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  6 Apr 2000 13:16:52 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.11) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Build deps.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sat,  4 Dec 1999 16:56:32 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.10) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Removed install-stamp target, which can cause obscure problems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu, 30 Sep 1999 13:32:33 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.9) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Expanded the man page to detail exactly what all parts of the display
 | 
				
			||||||
 | 
					    mean.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon, 13 Sep 1999 11:37:11 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.8) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Integrated with my build system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun, 12 Sep 1999 12:47:00 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.7) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * FHS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Mon,  6 Sep 1999 16:57:13 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.6) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * FreeBSD support, patch from Motoyuki Kasahara <m-kasahr@sra.co.jp>.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  8 Aug 1999 20:04:10 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.5) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Built w/o that ugly bug source known as fakeroot. Now all files are
 | 
				
			||||||
 | 
					    owned by root, not me.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  8 Aug 1999 17:35:32 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.4) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Let's try again on that patch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  8 Aug 1999 17:30:18 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.3) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Patch from Hugo Haas <hugoh@MIT.EDU> to allow geometry support.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Sun,  8 Aug 1999 16:18:44 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.2) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Patch from Edwin van Ouwerkerk Moria, may make the charging indicator
 | 
				
			||||||
 | 
					    work better on thinkpads.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  1 Jul 1999 09:58:04 -0700
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.1) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * Fixed man page location.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Thu,  4 Feb 1999 14:33:58 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wmbattery (1.0) unstable; urgency=low
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * First release.
 | 
				
			||||||
 | 
					  .
 | 
				
			||||||
 | 
					  * Started with wmapm 1.2 sources. Gutted it and cleaned it up extensively
 | 
				
			||||||
 | 
					    and turned it into wmbattery.
 | 
				
			||||||
 | 
					  * Drew new faceplate and graphics.
 | 
				
			||||||
 | 
					  * Converted manpage to refer to new program name.
 | 
				
			||||||
 | 
					  * Reorganized source tree.
 | 
				
			||||||
 | 
					  * Split single xpm up into lots of small xpms, loaded seperately.
 | 
				
			||||||
 | 
					  * Cleaned up Makefile.
 | 
				
			||||||
 | 
					  * Removed README, TODO, INSTALL, etc; I'll write my own.
 | 
				
			||||||
 | 
					  * Parse command line with getopt.
 | 
				
			||||||
 | 
					  * Made -d work to set the display.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 -- Joey Hess <joeyh@debian.org>  Fri, 25 Dec 1998 18:03:21 -0500
 | 
				
			||||||
							
								
								
									
										1
									
								
								wmbattery/debian/compat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								wmbattery/debian/compat
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					9
 | 
				
			||||||
							
								
								
									
										24
									
								
								wmbattery/debian/control
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								wmbattery/debian/control
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					Source: wmbattery
 | 
				
			||||||
 | 
					Section: x11
 | 
				
			||||||
 | 
					Priority: extra
 | 
				
			||||||
 | 
					Build-Depends: debhelper (>= 9), libxext-dev, libxpm-dev, autoconf, libapm-dev, dpkg-dev (>= 1.9.0), libxt-dev, libupower-glib-dev
 | 
				
			||||||
 | 
					Maintainer: Debian QA Group <packages@qa.debian.org>
 | 
				
			||||||
 | 
					Standards-Version: 3.9.3
 | 
				
			||||||
 | 
					Vcs-Git: git://git.kitenet.net/wmbattery
 | 
				
			||||||
 | 
					Homepage: http://kitenet.net/~joey/code/wmbattery/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Package: wmbattery
 | 
				
			||||||
 | 
					Architecture: any
 | 
				
			||||||
 | 
					Depends: ${shlibs:Depends}, ${misc:Depends}, upower
 | 
				
			||||||
 | 
					Suggests: wmaker
 | 
				
			||||||
 | 
					Description: display laptop battery info, dockable in WindowMaker
 | 
				
			||||||
 | 
					 wmbattery displays the status of your laptop's battery in a small icon.
 | 
				
			||||||
 | 
					 This includes if it is plugged in, if the battery is charging, how many
 | 
				
			||||||
 | 
					 minutes of battery life remain, and battery status (high - green, low -
 | 
				
			||||||
 | 
					 yellow, or critical - red).
 | 
				
			||||||
 | 
					 .
 | 
				
			||||||
 | 
					 There's nothing in the program that makes it require WindowMaker, except
 | 
				
			||||||
 | 
					 maybe the look. It can be docked in WindowMaker or AfterStep's dock.
 | 
				
			||||||
 | 
					 .
 | 
				
			||||||
 | 
					 wmbattery supports multi-battery machines, and can estimate how long
 | 
				
			||||||
 | 
					 it will take the battery to finish charging or discharging.
 | 
				
			||||||
							
								
								
									
										12
									
								
								wmbattery/debian/copyright
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								wmbattery/debian/copyright
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 | 
				
			||||||
 | 
					Source: derived from wmapm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Files: *
 | 
				
			||||||
 | 
					Copyright: 1998-2008 Joey Hess <joey@kitenet.net>
 | 
				
			||||||
 | 
					 1998 Chris D. Faulhaber <jedgar@speck.ml.org>
 | 
				
			||||||
 | 
					 Martijm Pieterse <pieterse@xs4all.nl> and
 | 
				
			||||||
 | 
					 Antoine Nulle <warp@xs4all.nl> 
 | 
				
			||||||
 | 
					Note: I would also like to thank Anna Hess for artistic guidance.
 | 
				
			||||||
 | 
					License: GPL-2
 | 
				
			||||||
 | 
					 On Debian systems, the complete text of the GPL can be found in
 | 
				
			||||||
 | 
					 /usr/share/common-licenses/GPL.
 | 
				
			||||||
							
								
								
									
										2
									
								
								wmbattery/debian/docs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								wmbattery/debian/docs
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					TODO
 | 
				
			||||||
 | 
					README
 | 
				
			||||||
							
								
								
									
										2
									
								
								wmbattery/debian/menu
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								wmbattery/debian/menu
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					?package(wmbattery):needs="x11" section="Applications/System/Monitoring" \
 | 
				
			||||||
 | 
						title="wmbattery" longtitle="wmbattery" command="wmbattery"
 | 
				
			||||||
							
								
								
									
										11
									
								
								wmbattery/debian/rules
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								wmbattery/debian/rules
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					#!/usr/bin/make -f
 | 
				
			||||||
 | 
					%:
 | 
				
			||||||
 | 
						dh $@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					override_dh_auto_configure:
 | 
				
			||||||
 | 
						autoconf
 | 
				
			||||||
 | 
						dh_auto_configure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Not intended for use by anyone except the author.
 | 
				
			||||||
 | 
					announcedir:
 | 
				
			||||||
 | 
						@echo ${HOME}/src/joeywiki/code/wmbattery/news
 | 
				
			||||||
							
								
								
									
										43
									
								
								wmbattery/dial_bright.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								wmbattery/dial_bright.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * dial_bright_xpm[] = {
 | 
				
			||||||
 | 
					"56 31 9 1",
 | 
				
			||||||
 | 
					" 	c #00000000FFFF",
 | 
				
			||||||
 | 
					".	c #000000000000",
 | 
				
			||||||
 | 
					"X	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					"o	c #FFFFFFFFFFFF",
 | 
				
			||||||
 | 
					"O	c #38E341034103",
 | 
				
			||||||
 | 
					"+	c #C71BC30BC71B",
 | 
				
			||||||
 | 
					"@	c #965896589658",
 | 
				
			||||||
 | 
					"#	c #208120812081",
 | 
				
			||||||
 | 
					"$	c #000049244103",
 | 
				
			||||||
 | 
					"                       ..........                       ",
 | 
				
			||||||
 | 
					"                   ....XXXXXXXXXX....                   ",
 | 
				
			||||||
 | 
					"                ...XXXXXXXXXXXXXXXXXX...                ",
 | 
				
			||||||
 | 
					"              ..XXXXXXXXXXXXXXXXXXXXXXXX..              ",
 | 
				
			||||||
 | 
					"             .XXXXXXXXXXXXXXXXXXXXXXXXXXXX.             ",
 | 
				
			||||||
 | 
					"           ..XXXXXXXXXXooooooooooXXXXXXXXXX.O           ",
 | 
				
			||||||
 | 
					"          .XXXXXXXXXooo          oo+XXXXXXXXXO          ",
 | 
				
			||||||
 | 
					"         .XXXXXXXXoo                ++XXXXXXXX@         ",
 | 
				
			||||||
 | 
					"        .XXXXXXXoo                    @@XXXXXXX@        ",
 | 
				
			||||||
 | 
					"       .XXXXXXoo                        @XXXXXXX+       ",
 | 
				
			||||||
 | 
					"      .XXXXXXo                           OOXXXXXX+      ",
 | 
				
			||||||
 | 
					"     .XXXXXXo                              OXXXXXXo     ",
 | 
				
			||||||
 | 
					"     .XXXXXo                                .XXXXXo     ",
 | 
				
			||||||
 | 
					"    .XXXXXo                                  .XXXXXo    ",
 | 
				
			||||||
 | 
					"   .XXXXXo                                    .XXXXXo   ",
 | 
				
			||||||
 | 
					"   .XXXXXo                                    .XXXXXo   ",
 | 
				
			||||||
 | 
					"  .XXXXXo                                      .XXXXXo  ",
 | 
				
			||||||
 | 
					"  .XXXXo  ....................................  .XXXXo  ",
 | 
				
			||||||
 | 
					"  .XXXXo  .##################################o  .XXXXo  ",
 | 
				
			||||||
 | 
					" .XXXXXo  .##$$$$###$$$$#######$$$$###$$$$###o  .XXXXXo ",
 | 
				
			||||||
 | 
					" .XXXXo   .#$####$#$####$##X##$####$#$####$##o   .XXXXo ",
 | 
				
			||||||
 | 
					" .XXXXo   .#$####$#$####$##X##$####$#$####$##o   .XXXXXo",
 | 
				
			||||||
 | 
					".XXXXXo   .#$####$#$####$#####$####$#$####$##o   .XXXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##$$$$###$$$$#######$$$$###$$$$###o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#$####$#$####$#####$####$#$####$##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#$####$#$####$##X##$####$#$####$##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#$####$#$####$##X##$####$#$####$##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##$$$$###$$$$#######$$$$###$$$$###o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##################################o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##################################o    .XXXXo",
 | 
				
			||||||
 | 
					".ooooo    .ooooooooooooooooooooooooooooooooooo    .ooooo"};
 | 
				
			||||||
							
								
								
									
										43
									
								
								wmbattery/dial_dim.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								wmbattery/dial_dim.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,43 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * dial_dim_xpm[] = {
 | 
				
			||||||
 | 
					"56 31 9 1",
 | 
				
			||||||
 | 
					" 	c #00000000FFFF",
 | 
				
			||||||
 | 
					".	c #000000000000",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #FFFFFFFFFFFF",
 | 
				
			||||||
 | 
					"O	c #38E341034103",
 | 
				
			||||||
 | 
					"+	c #C71BC30BC71B",
 | 
				
			||||||
 | 
					"@	c #965896589658",
 | 
				
			||||||
 | 
					"#	c #208120812081",
 | 
				
			||||||
 | 
					"$	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					"                       ..........                       ",
 | 
				
			||||||
 | 
					"                   ....XXXXXXXXXX....                   ",
 | 
				
			||||||
 | 
					"                ...XXXXXXXXXXXXXXXXXX...                ",
 | 
				
			||||||
 | 
					"              ..XXXXXXXXXXXXXXXXXXXXXXXX..              ",
 | 
				
			||||||
 | 
					"             .XXXXXXXXXXXXXXXXXXXXXXXXXXXX.             ",
 | 
				
			||||||
 | 
					"           ..XXXXXXXXXXooooooooooXXXXXXXXXX..           ",
 | 
				
			||||||
 | 
					"          .XXXXXXXXXooo          oooXXXXXXXXXO          ",
 | 
				
			||||||
 | 
					"         .XXXXXXXXoo                ++XXXXXXXXO         ",
 | 
				
			||||||
 | 
					"        .XXXXXXXoo                    @@XXXXXXX@        ",
 | 
				
			||||||
 | 
					"       .XXXXXXoo                        @XXXXXXX@       ",
 | 
				
			||||||
 | 
					"      .XXXXXXo                           OOXXXXXX+      ",
 | 
				
			||||||
 | 
					"     .XXXXXXo                              OXXXXXX+     ",
 | 
				
			||||||
 | 
					"     .XXXXXo                                .XXXXXo     ",
 | 
				
			||||||
 | 
					"    .XXXXXo                                  .XXXXXo    ",
 | 
				
			||||||
 | 
					"   .XXXXXo                                    .XXXXXo   ",
 | 
				
			||||||
 | 
					"   .XXXXXo                                    .XXXXXo   ",
 | 
				
			||||||
 | 
					"  .XXXXXo                                      .XXXXXo  ",
 | 
				
			||||||
 | 
					"  .XXXXo  ....................................  .XXXXo  ",
 | 
				
			||||||
 | 
					"  .XXXXo  .##################################o  .XXXXo  ",
 | 
				
			||||||
 | 
					" .XXXXXo  .##XXXX###XXXX#######XXXX###XXXX###o  .XXXXXo ",
 | 
				
			||||||
 | 
					" .XXXXo   .#X####X#X####X##$##X####X#X####X##o   .XXXXo ",
 | 
				
			||||||
 | 
					" .XXXXo   .#X####X#X####X##$##X####X#X####X##o   .XXXXXo",
 | 
				
			||||||
 | 
					".XXXXXo   .#X####X#X####X#####X####X#X####X##o   .XXXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##XXXX###XXXX#######XXXX###XXXX###o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#X####X#X####X#####X####X#X####X##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#X####X#X####X##$##X####X#X####X##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .#X####X#X####X##$##X####X#X####X##o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##XXXX###XXXX#######XXXX###XXXX###o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##################################o    .XXXXo",
 | 
				
			||||||
 | 
					".XXXXo    .##################################o    .XXXXo",
 | 
				
			||||||
 | 
					".ooooo    .ooooooooooooooooooooooooooooooooooo    .ooooo"};
 | 
				
			||||||
							
								
								
									
										74
									
								
								wmbattery/face.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								wmbattery/face.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,74 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * face_xpm[] = {
 | 
				
			||||||
 | 
					"64 64 7 1",
 | 
				
			||||||
 | 
					" 	c #00000000FFFF",
 | 
				
			||||||
 | 
					".	c #000000000000",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #FFFFFFFFFFFF",
 | 
				
			||||||
 | 
					"O	c #C71BC30BC71B",
 | 
				
			||||||
 | 
					"+	c #965896589658",
 | 
				
			||||||
 | 
					"@	c #208120812081",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                           ..........                           ",
 | 
				
			||||||
 | 
					"                       ....XXXXXXXXXX....                       ",
 | 
				
			||||||
 | 
					"                    ...XXXXXXXXXXXXXXXXXX...                    ",
 | 
				
			||||||
 | 
					"                  ..XXXXXXXXXXXXXXXXXXXXXXXX..                  ",
 | 
				
			||||||
 | 
					"                 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX.                 ",
 | 
				
			||||||
 | 
					"               ..XXXXXXXXXXooooooooooXXXXXXXXXX..               ",
 | 
				
			||||||
 | 
					"              .XXXXXXXXXooo          ooOXXXXXXXXX.              ",
 | 
				
			||||||
 | 
					"             .XXXXXXXXoo                OOXXXXXXXX+             ",
 | 
				
			||||||
 | 
					"            .XXXXXXXoo                    ++XXXXXXX+            ",
 | 
				
			||||||
 | 
					"           .XXXXXXoo                        +.XXXXXXO           ",
 | 
				
			||||||
 | 
					"          .XXXXXXo                            .XXXXXXO          ",
 | 
				
			||||||
 | 
					"         .XXXXXXo                              .XXXXXXo         ",
 | 
				
			||||||
 | 
					"         .XXXXXo                                .XXXXXo         ",
 | 
				
			||||||
 | 
					"        .XXXXXo                                  .XXXXXo        ",
 | 
				
			||||||
 | 
					"       .XXXXXo                                    .XXXXXo       ",
 | 
				
			||||||
 | 
					"       .XXXXXo                                    .XXXXXo       ",
 | 
				
			||||||
 | 
					"      .XXXXXo                                      .XXXXXo      ",
 | 
				
			||||||
 | 
					"      .XXXXo  ....................................  .XXXXo      ",
 | 
				
			||||||
 | 
					"      .XXXXo  .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o  .XXXXo      ",
 | 
				
			||||||
 | 
					"     .XXXXXo  .@@XXXX@@@XXXX@@@@@@@XXXX@@@XXXX@@@o  .XXXXXo     ",
 | 
				
			||||||
 | 
					"     .XXXXo   .@X@@@@X@X@@@@X@@X@@X@@@@X@X@@@@X@@o   .XXXXo     ",
 | 
				
			||||||
 | 
					"     .XXXXo   .@X@@@@X@X@@@@X@@X@@X@@@@X@X@@@@X@@o   .XXXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXXo   .@X@@@@X@X@@@@X@@@@@X@@@@X@X@@@@X@@o   .XXXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@@XXXX@@@XXXX@@@@@@@XXXX@@@XXXX@@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@X@@@@X@X@@@@X@@@@@X@@@@X@X@@@@X@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@X@@@@X@X@@@@X@@X@@X@@@@X@X@@@@X@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@X@@@@X@X@@@@X@@X@@X@@@@X@X@@@@X@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@@XXXX@@@XXXX@@@@@@@XXXX@@@XXXX@@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .XXXXo    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    .XXXXo    ",
 | 
				
			||||||
 | 
					"    .ooooo    .ooooooooooooooooooooooooooooooooooo    .ooooo    ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"    ........................................................    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXX@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@X@@@@@@X@@@@@@@@@@@@@@@@@@@@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@XXX@@@@@X@@@@@@@@@@@@@@@@@@@@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@XXXX@@@@@@@@@@XXX@XX@@@X@@@@XXX@@@XXX@@@X@@@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@X@@@XXX@@@@@@@@XX@@@@XX@X@X@X@@@X@X@@@X@X@X@X@XXX@o    ",
 | 
				
			||||||
 | 
					"    .@@@@X@@@X@@@@@@@@@XXX@@@@@@@X@X@X@@@X@X@@@X@@X@X@@XXX@o    ",
 | 
				
			||||||
 | 
					"    .@@XXX@@@X@@@XX@@@@XX@@@@@@@@X@@@@XXX@@@XXX@@@@X@@@XXX@o    ",
 | 
				
			||||||
 | 
					"    .@X@@X@@@XXX@@@XX@XXX@@@@@@@@X@X@X@@@X@X@@@X@@X@X@@XXX@o    ",
 | 
				
			||||||
 | 
					"    .@X@@@XXXX@@@@@@@XXX@@@@@@@@@X@X@X@@@X@X@@@X@X@X@X@XXX@o    ",
 | 
				
			||||||
 | 
					"    .@X@@@@@@@@@@@@@@@X@@@@@@@@@@X@@@@XXX@@@XXX@@@@@X@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@X@@@@@@@@@@@@@@@@@@@@@@@@@@X@@@@@@@@@@@@@@@@@@@@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@@@@@@@@@@@@@@@@@@@@@X@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@XXXXXXXXXXXXXXXXXXXXX@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    ",
 | 
				
			||||||
 | 
					"    .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@o    ",
 | 
				
			||||||
 | 
					"    .ooooooooooooooooooooooooooooooooooooooooooooooooooooooo    ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                ",
 | 
				
			||||||
 | 
					"                                                                "};
 | 
				
			||||||
							
								
								
									
										46
									
								
								wmbattery/mask.xbm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								wmbattery/mask.xbm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					#define mask_width 64
 | 
				
			||||||
 | 
					#define mask_height 64
 | 
				
			||||||
 | 
					static char mask_bits[] = {
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
 | 
				
			||||||
 | 
					  0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0x01, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0xf0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x7f, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xff, 0x07,
 | 
				
			||||||
 | 
					  0xe0, 0xff, 0x03, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x07, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0xf0, 0x3f, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xf8, 0x0f, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0xf0, 0x1f, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0xc0, 0x3f, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0xfe, 0x01, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0xfe, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00,
 | 
				
			||||||
 | 
					  0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x80, 0x3f, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0xfc, 0x01, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03,
 | 
				
			||||||
 | 
					  0xc0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x03, 0xc0, 0xcf, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xf3, 0x03, 0xe0, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x07,
 | 
				
			||||||
 | 
					  0xe0, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x07, 0xe0, 0xc7, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xe3, 0x0f, 0xf0, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xe3, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x0f, 0xf0, 0xc3, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xc3, 0x0f, 0xf0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x0f, 0xf0, 0xc3, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xc3, 0x0f, 0xf0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x0f, 0xf0, 0xc3, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xc3, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f,
 | 
				
			||||||
 | 
					  0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf0, 0xff, 0xff, 0xff,
 | 
				
			||||||
 | 
					  0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
				
			||||||
 | 
					  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };
 | 
				
			||||||
							
								
								
									
										18
									
								
								wmbattery/nocharging.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								wmbattery/nocharging.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char *nocharging[] = {
 | 
				
			||||||
 | 
					/* width height num_colors chars_per_pixel */
 | 
				
			||||||
 | 
					"    15     9        2            1",
 | 
				
			||||||
 | 
					/* colors */
 | 
				
			||||||
 | 
					". c #202020",
 | 
				
			||||||
 | 
					"# c #004941",
 | 
				
			||||||
 | 
					/* pixels */
 | 
				
			||||||
 | 
					".........#.....",
 | 
				
			||||||
 | 
					"........###....",
 | 
				
			||||||
 | 
					".......###.##..",
 | 
				
			||||||
 | 
					".......##....##",
 | 
				
			||||||
 | 
					"......###......",
 | 
				
			||||||
 | 
					"##....##.......",
 | 
				
			||||||
 | 
					"..##.###.......",
 | 
				
			||||||
 | 
					"....###........",
 | 
				
			||||||
 | 
					".....#........."
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										17
									
								
								wmbattery/plugged.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								wmbattery/plugged.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char *plugged[] = {
 | 
				
			||||||
 | 
					/* width height num_colors chars_per_pixel */
 | 
				
			||||||
 | 
					"    10     8        2            1",
 | 
				
			||||||
 | 
					/* colors */
 | 
				
			||||||
 | 
					". c #202020",
 | 
				
			||||||
 | 
					"# c #20b2ae",
 | 
				
			||||||
 | 
					/* pixels */
 | 
				
			||||||
 | 
					"....####..",
 | 
				
			||||||
 | 
					"...#...###",
 | 
				
			||||||
 | 
					"...#...#..",
 | 
				
			||||||
 | 
					".###...#..",
 | 
				
			||||||
 | 
					"#..#...###",
 | 
				
			||||||
 | 
					"#...####..",
 | 
				
			||||||
 | 
					"#.........",
 | 
				
			||||||
 | 
					"#........."
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										223
									
								
								wmbattery/simplehal.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										223
									
								
								wmbattery/simplehal.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,223 @@
 | 
				
			||||||
 | 
					/* Not particularly good interface to hal, for programs that used to use
 | 
				
			||||||
 | 
					 * apm.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <libhal.h>
 | 
				
			||||||
 | 
					#include "apm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static DBusConnection *dbus_ctx = NULL;
 | 
				
			||||||
 | 
					static LibHalContext *hal_ctx = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int num_ac_adapters = 0;
 | 
				
			||||||
 | 
					int num_batteries = 0;
 | 
				
			||||||
 | 
					char **ac_adapters = NULL;
 | 
				
			||||||
 | 
					char **batteries = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int connect_hal (void) {
 | 
				
			||||||
 | 
						DBusError error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dbus_error_init(&error);
 | 
				
			||||||
 | 
						dbus_ctx = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error);
 | 
				
			||||||
 | 
						if (dbus_ctx == NULL) {
 | 
				
			||||||
 | 
							fprintf(stderr, "error: dbus_bus_get: %s: %s\n",
 | 
				
			||||||
 | 
								 error.name, error.message);
 | 
				
			||||||
 | 
							LIBHAL_FREE_DBUS_ERROR(&error);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if ((hal_ctx = libhal_ctx_new()) == NULL) {
 | 
				
			||||||
 | 
							fprintf(stderr, "error: libhal_ctx_new\n");
 | 
				
			||||||
 | 
							LIBHAL_FREE_DBUS_ERROR(&error);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (!libhal_ctx_set_dbus_connection(hal_ctx, dbus_ctx)) {
 | 
				
			||||||
 | 
							fprintf(stderr, "error: libhal_ctx_set_dbus_connection: %s: %s\n",
 | 
				
			||||||
 | 
								 error.name, error.message);
 | 
				
			||||||
 | 
							LIBHAL_FREE_DBUS_ERROR(&error);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (!libhal_ctx_init(hal_ctx, &error)) {
 | 
				
			||||||
 | 
							if (dbus_error_is_set(&error)) {
 | 
				
			||||||
 | 
								fprintf(stderr, "error: libhal_ctx_init: %s: %s\n", error.name, error.message);
 | 
				
			||||||
 | 
								LIBHAL_FREE_DBUS_ERROR(&error);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fprintf(stderr, "Could not initialise connection to hald.\n"
 | 
				
			||||||
 | 
									 "Normally this means the HAL daemon (hald) is not running or not ready.\n");
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					int hal_ready (void) {
 | 
				
			||||||
 | 
						if (hal_ctx && dbus_connection_get_is_connected(dbus_ctx)) {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							/* The messy business of reconnecting.
 | 
				
			||||||
 | 
							 * dbus's design is crap when it comes to reconnecting.
 | 
				
			||||||
 | 
							 * If dbus is down, can't actually close the connection to hal,
 | 
				
			||||||
 | 
							 * since libhal wants to use dbus to do it. */
 | 
				
			||||||
 | 
							if (dbus_ctx) {
 | 
				
			||||||
 | 
								dbus_connection_close(dbus_ctx);
 | 
				
			||||||
 | 
								dbus_connection_unref(dbus_ctx);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dbus_ctx = NULL;
 | 
				
			||||||
 | 
							hal_ctx = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return connect_hal();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signed int get_hal_int (const char *udi, const char *key, int optional) {
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
						DBusError error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (! hal_ready()) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dbus_error_init(&error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = libhal_device_get_property_int (hal_ctx, udi, key, &error);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (! dbus_error_is_set (&error)) {
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							if (! optional) {
 | 
				
			||||||
 | 
								fprintf(stderr, "error: libhal_device_get_property_int: %s: %s\n",
 | 
				
			||||||
 | 
									 error.name, error.message);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dbus_error_free (&error);
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signed int get_hal_bool (const char *udi, const char *key, int optional) {
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
						DBusError error;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (! hal_ready()) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						dbus_error_init(&error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = libhal_device_get_property_bool (hal_ctx, udi, key, &error);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (! dbus_error_is_set (&error)) {
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							if (! optional) {
 | 
				
			||||||
 | 
								fprintf(stderr, "error: libhal_device_get_property_bool: %s: %s\n",
 | 
				
			||||||
 | 
									 error.name, error.message);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							dbus_error_free (&error);
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void find_devices (void) {
 | 
				
			||||||
 | 
						DBusError error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dbus_error_init(&error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ac_adapters)
 | 
				
			||||||
 | 
							libhal_free_string_array(ac_adapters);
 | 
				
			||||||
 | 
						ac_adapters = libhal_find_device_by_capability(hal_ctx, "ac_adapter",
 | 
				
			||||||
 | 
							&num_ac_adapters, &error);
 | 
				
			||||||
 | 
						if (dbus_error_is_set (&error)) {
 | 
				
			||||||
 | 
							fprintf (stderr, "error: %s: %s\n", error.name, error.message);
 | 
				
			||||||
 | 
							LIBHAL_FREE_DBUS_ERROR (&error);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (batteries)
 | 
				
			||||||
 | 
							libhal_free_string_array(batteries);
 | 
				
			||||||
 | 
						batteries = libhal_find_device_by_capability(hal_ctx, "battery",
 | 
				
			||||||
 | 
							&num_batteries, &error);
 | 
				
			||||||
 | 
						if (dbus_error_is_set (&error)) {
 | 
				
			||||||
 | 
							fprintf (stderr, "error: %s: %s\n", error.name, error.message);
 | 
				
			||||||
 | 
							LIBHAL_FREE_DBUS_ERROR (&error);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int simplehal_supported (void) {
 | 
				
			||||||
 | 
						if (! connect_hal()) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							find_devices();
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Fill the passed apm_info struct. */
 | 
				
			||||||
 | 
					int simplehal_read (int battery, apm_info *info) {
 | 
				
			||||||
 | 
						char *device;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Allow a battery that was not present before to appear. */
 | 
				
			||||||
 | 
						if (battery > num_batteries) {
 | 
				
			||||||
 | 
							find_devices();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->battery_flags = 0;
 | 
				
			||||||
 | 
						info->using_minutes = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->ac_line_status=0;
 | 
				
			||||||
 | 
						for (i = 0 ; i < num_ac_adapters && ! info->ac_line_status ; i++) {
 | 
				
			||||||
 | 
							info->ac_line_status = (get_hal_bool(ac_adapters[i], "ac_adapter.present", 0) == 1);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (battery > num_batteries) {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_time = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							device=batteries[battery-1];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (get_hal_bool(device, "battery.present", 0) != 1) {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_time = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* remaining_time and charge_level.percentage are not a mandatory
 | 
				
			||||||
 | 
						 * keys, so if not present, -1 will be returned */
 | 
				
			||||||
 | 
						info->battery_time = get_hal_int(device, "battery.remaining_time", 1);
 | 
				
			||||||
 | 
						info->battery_percentage = get_hal_int(device, "battery.charge_level.percentage", 1);
 | 
				
			||||||
 | 
						if (get_hal_bool(device, "battery.rechargeable.is_discharging", 0) == 1) {
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
							/* charge_level.warning and charge_level.low are not
 | 
				
			||||||
 | 
							 * required to be available; this is good enough */
 | 
				
			||||||
 | 
							if (info->battery_percentage < 1) {
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_CRITICAL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (info->battery_percentage < 10) {
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_LOW;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (info->ac_line_status &&
 | 
				
			||||||
 | 
						         get_hal_bool(device, "battery.rechargeable.is_charging", 0) == 1) {
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
							info->battery_flags = info->battery_flags | BATTERY_FLAGS_CHARGING;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (info->ac_line_status) {
 | 
				
			||||||
 | 
							/* Must be fully charged. */
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_HIGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							fprintf(stderr, "unknown battery state\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								wmbattery/simplehal.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								wmbattery/simplehal.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					int simplehal_supported (void);
 | 
				
			||||||
 | 
					int simplehal_read (int battery, apm_info *info);
 | 
				
			||||||
							
								
								
									
										16
									
								
								wmbattery/smallfont.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								wmbattery/smallfont.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char * smallfont_xpm[] = {
 | 
				
			||||||
 | 
					"67 7 6 1",
 | 
				
			||||||
 | 
					" 	c #208120812081",
 | 
				
			||||||
 | 
					".	c #2081B2CAAEBA",
 | 
				
			||||||
 | 
					"X	c #000049244103",
 | 
				
			||||||
 | 
					"o	c #18618A288617",
 | 
				
			||||||
 | 
					"O	c #000079E771C6",
 | 
				
			||||||
 | 
					"+	c #104079E779E7",
 | 
				
			||||||
 | 
					" ...   XXXo o...o o...o oXXXo o...o o...o o...o o...o o...o  X    o",
 | 
				
			||||||
 | 
					".   . X   . X   . X   . .   . .   X .   X X   . .   . .   . X X X .",
 | 
				
			||||||
 | 
					".   . X   . X   . X   . .   . .   X .   X X   . .   . .   .  X X  .",
 | 
				
			||||||
 | 
					"oXXXo  XXXo o...o  ...o o...o O...o o...o  XXXo o...o +...o   X   o",
 | 
				
			||||||
 | 
					".   . X   . .   X X   . X   . X   . .   . X   . .   . X   .  X X  .",
 | 
				
			||||||
 | 
					".   . X   . .   X X   . X   . X   . .   . X   . .   . X   . X X X .",
 | 
				
			||||||
 | 
					" ...   XXX. o...o o...o  XXXo o...o o...o  XXXO o...o o...o    X  ."};
 | 
				
			||||||
							
								
								
									
										74
									
								
								wmbattery/sonypi.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								wmbattery/sonypi.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,74 @@
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <sys/ioctl.h>
 | 
				
			||||||
 | 
					#include "apm.h"
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					#include <sys/stat.h>
 | 
				
			||||||
 | 
					#include <fcntl.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "sonypi.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signed int spicfd = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int sonypi_supported (void) {
 | 
				
			||||||
 | 
						if ((spicfd = open("/dev/sonypi", O_RDWR)) == -1)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inline int sonypi_ioctl(int ioctlno, void *param) {
 | 
				
			||||||
 | 
						if (ioctl(spicfd, ioctlno, param) < 0)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Read battery info from sonypi device and shove it into an apm_info
 | 
				
			||||||
 | 
					 * struct. */
 | 
				
			||||||
 | 
					int sonypi_read (apm_info *info) {
 | 
				
			||||||
 | 
						__u8 batflags;
 | 
				
			||||||
 | 
						__u16 cap, rem;
 | 
				
			||||||
 | 
						int havebatt = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						info->using_minutes = info->battery_flags = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (! sonypi_ioctl(SONYPI_IOCGBATFLAGS, &batflags)) {
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->ac_line_status = (batflags & SONYPI_BFLAGS_AC) != 0;
 | 
				
			||||||
 | 
						if (batflags & SONYPI_BFLAGS_B1) {
 | 
				
			||||||
 | 
							if (! sonypi_ioctl(SONYPI_IOCGBAT1CAP, &cap))
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							if (! sonypi_ioctl(SONYPI_IOCGBAT1REM, &rem))
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							havebatt = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (batflags & SONYPI_BFLAGS_B2) {
 | 
				
			||||||
 | 
							/* Not quite right, if there is a second battery I should
 | 
				
			||||||
 | 
							 * probably merge the two somehow.. */
 | 
				
			||||||
 | 
							if (! sonypi_ioctl(SONYPI_IOCGBAT2CAP, &cap))
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							if (! sonypi_ioctl(SONYPI_IOCGBAT2REM, &rem))
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							havebatt = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if (havebatt) {
 | 
				
			||||||
 | 
							info->battery_percentage = 100 * rem / cap;
 | 
				
			||||||
 | 
							/* Guess at whether the battery is charging. */
 | 
				
			||||||
 | 
							if (info->battery_percentage < 99 && info->ac_line_status == 1) {
 | 
				
			||||||
 | 
								info->battery_flags = info->battery_flags | BATTERY_FLAGS_CHARGING;
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Sadly, there is no way to estimate this. */
 | 
				
			||||||
 | 
						info->battery_time = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								wmbattery/sonypi.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								wmbattery/sonypi.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					int sonypi_supported (void);
 | 
				
			||||||
 | 
					int sonypi_read (apm_info *info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* There's no good place to get these constants, so I must define them
 | 
				
			||||||
 | 
					 * myself. */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <linux/types.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* get battery full capacity/remaining capacity */
 | 
				
			||||||
 | 
					#define SONYPI_IOCGBAT1CAP	_IOR('v', 2, __u16)
 | 
				
			||||||
 | 
					#define SONYPI_IOCGBAT1REM	_IOR('v', 3, __u16)
 | 
				
			||||||
 | 
					#define SONYPI_IOCGBAT2CAP	_IOR('v', 4, __u16)
 | 
				
			||||||
 | 
					#define SONYPI_IOCGBAT2REM	_IOR('v', 5, __u16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* get battery flags: battery1/battery2/ac adapter present */
 | 
				
			||||||
 | 
					#define SONYPI_BFLAGS_B1	0x01
 | 
				
			||||||
 | 
					#define SONYPI_BFLAGS_B2	0x02
 | 
				
			||||||
 | 
					#define SONYPI_BFLAGS_AC	0x04
 | 
				
			||||||
 | 
					#define SONYPI_IOCGBATFLAGS	_IOR('v', 7, __u8)
 | 
				
			||||||
							
								
								
									
										17
									
								
								wmbattery/unplugged.xpm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								wmbattery/unplugged.xpm
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					/* XPM */
 | 
				
			||||||
 | 
					static char *unplugged[] = {
 | 
				
			||||||
 | 
					/* width height num_colors chars_per_pixel */
 | 
				
			||||||
 | 
					"    10     8        2            1",
 | 
				
			||||||
 | 
					/* colors */
 | 
				
			||||||
 | 
					". c #202020",
 | 
				
			||||||
 | 
					"# c #004941",
 | 
				
			||||||
 | 
					/* pixels */
 | 
				
			||||||
 | 
					"....####..",
 | 
				
			||||||
 | 
					"...#...###",
 | 
				
			||||||
 | 
					"...#...#..",
 | 
				
			||||||
 | 
					".###...#..",
 | 
				
			||||||
 | 
					"#..#...###",
 | 
				
			||||||
 | 
					"#...####..",
 | 
				
			||||||
 | 
					"#.........",
 | 
				
			||||||
 | 
					"#........."
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										151
									
								
								wmbattery/upower.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								wmbattery/upower.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,151 @@
 | 
				
			||||||
 | 
					/* Not particularly good interface to hal, for programs that used to use
 | 
				
			||||||
 | 
					 * apm.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <upower.h>
 | 
				
			||||||
 | 
					#include "apm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int num_batteries = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct context {
 | 
				
			||||||
 | 
						int current;
 | 
				
			||||||
 | 
						int needed;
 | 
				
			||||||
 | 
						guint state;
 | 
				
			||||||
 | 
						int percentage;
 | 
				
			||||||
 | 
						gboolean ac;
 | 
				
			||||||
 | 
						int time;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void get_devinfo(gpointer device, gpointer result)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						gboolean online;
 | 
				
			||||||
 | 
						gdouble percentage;
 | 
				
			||||||
 | 
						guint state;
 | 
				
			||||||
 | 
						guint kind;
 | 
				
			||||||
 | 
						gint64 time_to_empty;
 | 
				
			||||||
 | 
						gint64 time_to_full;
 | 
				
			||||||
 | 
						struct context * ctx = result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						g_object_get(G_OBJECT(device), "percentage", &percentage,
 | 
				
			||||||
 | 
							"online", &online,
 | 
				
			||||||
 | 
							"state", &state,
 | 
				
			||||||
 | 
							"kind", &kind,
 | 
				
			||||||
 | 
							"time-to-empty", &time_to_empty,
 | 
				
			||||||
 | 
							"time-to-full", &time_to_full,
 | 
				
			||||||
 | 
							NULL);
 | 
				
			||||||
 | 
						if (kind == UP_DEVICE_KIND_BATTERY) {
 | 
				
			||||||
 | 
							if (ctx->current == ctx->needed) {
 | 
				
			||||||
 | 
								ctx->percentage = (int)percentage;
 | 
				
			||||||
 | 
								ctx->state = state;
 | 
				
			||||||
 | 
								if (time_to_empty) {
 | 
				
			||||||
 | 
									ctx->time = time_to_empty;
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									ctx->time = time_to_full;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctx->current++;
 | 
				
			||||||
 | 
						} else if (kind == UP_DEVICE_KIND_LINE_POWER) {
 | 
				
			||||||
 | 
							ctx->ac |= online;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int upower_supported (void) {
 | 
				
			||||||
 | 
						UpClient * up;
 | 
				
			||||||
 | 
						up = up_client_new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!up) {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							GPtrArray * devices = up_client_get_devices(up);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!devices) {
 | 
				
			||||||
 | 
								g_object_unref(up);
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								g_ptr_array_unref(devices);
 | 
				
			||||||
 | 
								g_object_unref(up);
 | 
				
			||||||
 | 
								return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Fill the passed apm_info struct. */
 | 
				
			||||||
 | 
					int upower_read(int battery, apm_info *info) {
 | 
				
			||||||
 | 
						UpClient * up;
 | 
				
			||||||
 | 
						GPtrArray * devices = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						up = up_client_new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!up) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#if !UP_CHECK_VERSION(0, 9, 99)
 | 
				
			||||||
 | 
						/* Allow a battery that was not present before to appear. */
 | 
				
			||||||
 | 
						up_client_enumerate_devices_sync(up, NULL, NULL);
 | 
				
			||||||
 | 
						#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						devices = up_client_get_devices(up);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!devices) {
 | 
				
			||||||
 | 
							return -1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->battery_flags = 0;
 | 
				
			||||||
 | 
						info->using_minutes = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct context ctx = {
 | 
				
			||||||
 | 
							.current = 0,
 | 
				
			||||||
 | 
							.needed = battery - 1,
 | 
				
			||||||
 | 
							.state = UP_DEVICE_STATE_UNKNOWN,
 | 
				
			||||||
 | 
							.percentage = -1,
 | 
				
			||||||
 | 
							.ac = FALSE,
 | 
				
			||||||
 | 
							.time = -1
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						g_ptr_array_foreach(devices, &get_devinfo, &ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						info->ac_line_status = ctx.ac;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* remaining_time and charge_level.percentage are not a mandatory
 | 
				
			||||||
 | 
						 * keys, so if not present, -1 will be returned */
 | 
				
			||||||
 | 
						info->battery_time = ctx.time;
 | 
				
			||||||
 | 
						info->battery_percentage = ctx.percentage;
 | 
				
			||||||
 | 
						if (ctx.state == UP_DEVICE_STATE_DISCHARGING) {
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
							/* charge_level.warning and charge_level.low are not
 | 
				
			||||||
 | 
							 * required to be available; this is good enough */
 | 
				
			||||||
 | 
							if (info->battery_percentage < 1) {
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_CRITICAL;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if (info->battery_percentage < 10) {
 | 
				
			||||||
 | 
								info->battery_status = BATTERY_STATUS_LOW;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (info->ac_line_status && ctx.state == UP_DEVICE_STATE_CHARGING) {
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_CHARGING;
 | 
				
			||||||
 | 
							info->battery_flags = info->battery_flags | BATTERY_FLAGS_CHARGING;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (info->ac_line_status) {
 | 
				
			||||||
 | 
							/* Must be fully charged. */
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_HIGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							fprintf(stderr, "unknown battery state\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (ctx.percentage < 0) {
 | 
				
			||||||
 | 
							info->battery_percentage = 0;
 | 
				
			||||||
 | 
							info->battery_time = 0;
 | 
				
			||||||
 | 
							info->battery_status = BATTERY_STATUS_ABSENT;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						g_ptr_array_free(devices, TRUE);
 | 
				
			||||||
 | 
						g_object_unref(up);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								wmbattery/upower.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								wmbattery/upower.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					int upower_supported(void);
 | 
				
			||||||
 | 
					int upower_read(int battery, apm_info *info);
 | 
				
			||||||
							
								
								
									
										110
									
								
								wmbattery/wmbattery.1x
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								wmbattery/wmbattery.1x
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,110 @@
 | 
				
			||||||
 | 
					.TH WMBATTERY 1x
 | 
				
			||||||
 | 
					.SH NAME
 | 
				
			||||||
 | 
					wmbattery \- dockable battery monitor
 | 
				
			||||||
 | 
					.SH SYNOPSIS
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					[options]
 | 
				
			||||||
 | 
					.SH DESCRIPTION
 | 
				
			||||||
 | 
					.PP
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					is a battery monitor.  It is used to visually display the system's battery 
 | 
				
			||||||
 | 
					status.
 | 
				
			||||||
 | 
					.PP
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					can get battery information using upower, HAL, APM, ACPI, or
 | 
				
			||||||
 | 
					the SPIC controller in some Sony laptops.
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					is dockable using WindowMaker and AfterStep window managers; under
 | 
				
			||||||
 | 
					other window managers
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					appears as a nicely-sized 64x64 application.
 | 
				
			||||||
 | 
					.PP
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					displays the status of your laptop's battery in a small icon.  This
 | 
				
			||||||
 | 
					includes if it is plugged in, if the battery is charging, how many
 | 
				
			||||||
 | 
					minutes of battery life remain, battery life remaining (with both a
 | 
				
			||||||
 | 
					percentage and a graph), and battery status (high - green, low -
 | 
				
			||||||
 | 
					yellow, or critical - red).
 | 
				
			||||||
 | 
					.SH "ELEMENTS OF THE DISPLAY"
 | 
				
			||||||
 | 
					The
 | 
				
			||||||
 | 
					.B wmbattery
 | 
				
			||||||
 | 
					display consists of these elements:
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B dial
 | 
				
			||||||
 | 
					The large dial at the top of the display shows battery life remaining.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B time display
 | 
				
			||||||
 | 
					The time display, right under and in the middle of the dial, shows how
 | 
				
			||||||
 | 
					many hours and minutes of battery life is estimated to remain at the
 | 
				
			||||||
 | 
					current rate of use.
 | 
				
			||||||
 | 
					.P
 | 
				
			||||||
 | 
					.RS
 | 
				
			||||||
 | 
					If ACPI is used and battery is charging, the time display will instead show
 | 
				
			||||||
 | 
					a countdown (starting with a minus sign) of how many hours and minutes it is
 | 
				
			||||||
 | 
					estimated to take until the battery is fully charged.
 | 
				
			||||||
 | 
					.RE
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B power cord
 | 
				
			||||||
 | 
					The small icon of a power cord plug, in the bottom left, tells if the
 | 
				
			||||||
 | 
					laptop is plugged into wall power. If so, it will be lit.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B charging indicator
 | 
				
			||||||
 | 
					The lightning bolt icon, to the right of the plug, tells if the
 | 
				
			||||||
 | 
					battery is being charged. If so it will be lit and will connect the
 | 
				
			||||||
 | 
					plug to the battery.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B battery icon
 | 
				
			||||||
 | 
					The battery icon, to the right of the lighting bolt, shows the
 | 
				
			||||||
 | 
					percentage of battery time. If the battery is removed the icon will be
 | 
				
			||||||
 | 
					dimmed. If the computer is low on power the battery will turn yellow;
 | 
				
			||||||
 | 
					if the computer is critically low on power and about to die because of
 | 
				
			||||||
 | 
					it, it will turn red.
 | 
				
			||||||
 | 
					.SH OPTIONS
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-h
 | 
				
			||||||
 | 
					Display list of command-line options.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-w secs
 | 
				
			||||||
 | 
					Pause this many seconds between updates.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-d display
 | 
				
			||||||
 | 
					Use the designated X display.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-g +x+y
 | 
				
			||||||
 | 
					Specify geometry. This specifies position, not size.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-b battnum
 | 
				
			||||||
 | 
					Display the given battery. Only of use with the HAL or ACPI interfaces on
 | 
				
			||||||
 | 
					systems with more than one battery. The default is to display the first
 | 
				
			||||||
 | 
					battery found.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-l percent
 | 
				
			||||||
 | 
					Set the percentage at which the battery is considered to be running low. By
 | 
				
			||||||
 | 
					default, this percentage is determined automaticall, and you shouldn't
 | 
				
			||||||
 | 
					need to set it. If you set this, you should probably also set the \-c
 | 
				
			||||||
 | 
					switch.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-c percent
 | 
				
			||||||
 | 
					Set the percentage at which the battery is considered to be critically low.
 | 
				
			||||||
 | 
					By default, this percentage is determined automatically, and you shouldn't
 | 
				
			||||||
 | 
					need to set it. If you set this, you should probably also set the \-l
 | 
				
			||||||
 | 
					switch.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-e
 | 
				
			||||||
 | 
					wmbattery contains code for estimating the time remaining before discharge,
 | 
				
			||||||
 | 
					and until full charge, and this code is used if no other source of this
 | 
				
			||||||
 | 
					informaton is available. This switch makes wmbattery use its time 
 | 
				
			||||||
 | 
					estimation code even if some other estimate is available.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-s granularity
 | 
				
			||||||
 | 
					Ignore fluctuations less than the specified granularity percent when
 | 
				
			||||||
 | 
					estimating time. (Implies -e)
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-a file.au
 | 
				
			||||||
 | 
					Play the specified au file (by sending it to /dev/audio) when the battery
 | 
				
			||||||
 | 
					is low.
 | 
				
			||||||
 | 
					.TP
 | 
				
			||||||
 | 
					.B \-i
 | 
				
			||||||
 | 
					Display as icon.
 | 
				
			||||||
 | 
					.SH AUTHOR
 | 
				
			||||||
 | 
					Joey Hess <joey@kitenet.net>
 | 
				
			||||||
							
								
								
									
										653
									
								
								wmbattery/wmbattery.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										653
									
								
								wmbattery/wmbattery.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,653 @@
 | 
				
			||||||
 | 
					#include "config.h"
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					#include <stdlib.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <X11/xpm.h>
 | 
				
			||||||
 | 
					#include <X11/extensions/shape.h>
 | 
				
			||||||
 | 
					#include <stdarg.h>
 | 
				
			||||||
 | 
					#include <signal.h>
 | 
				
			||||||
 | 
					#include <time.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <fcntl.h>
 | 
				
			||||||
 | 
					#include <sys/types.h>
 | 
				
			||||||
 | 
					#include <sys/stat.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef HAVE_GETOPT_H
 | 
				
			||||||
 | 
					#include <getopt.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wmbattery.h"
 | 
				
			||||||
 | 
					#include "mask.xbm"
 | 
				
			||||||
 | 
					#include "sonypi.h"
 | 
				
			||||||
 | 
					#include "acpi.h"
 | 
				
			||||||
 | 
					#ifdef HAL
 | 
				
			||||||
 | 
					#include "simplehal.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef UPOWER
 | 
				
			||||||
 | 
					#include "upower.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Pixmap images[NUM_IMAGES];
 | 
				
			||||||
 | 
					Window root, iconwin, win;
 | 
				
			||||||
 | 
					int screen;
 | 
				
			||||||
 | 
					XpmIcon icon;
 | 
				
			||||||
 | 
					Display *display;
 | 
				
			||||||
 | 
					GC NormalGC;
 | 
				
			||||||
 | 
					int pos[2] = {0, 0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					char *crit_audio_fn = NULL;
 | 
				
			||||||
 | 
					char *crit_audio;
 | 
				
			||||||
 | 
					int crit_audio_size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int battnum = 1;
 | 
				
			||||||
 | 
					#ifdef HAL
 | 
				
			||||||
 | 
					int use_simplehal = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef UPOWER
 | 
				
			||||||
 | 
					int use_upower = 0;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					int use_sonypi = 0;
 | 
				
			||||||
 | 
					int use_acpi = 0;
 | 
				
			||||||
 | 
					int delay = 0;
 | 
				
			||||||
 | 
					int always_estimate_remaining = 0;
 | 
				
			||||||
 | 
					int granularity_estimate_remaining = 1;
 | 
				
			||||||
 | 
					int initial_state = WithdrawnState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					signed int low_pct = -1;
 | 
				
			||||||
 | 
					signed int critical_pct = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void error(const char *fmt, ...) {
 | 
				
			||||||
 | 
						va_list arglist;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						va_start(arglist, fmt);
 | 
				
			||||||
 | 
						fprintf(stderr, "Error: ");
 | 
				
			||||||
 | 
						vfprintf(stderr, fmt, arglist);
 | 
				
			||||||
 | 
						fprintf(stderr, "\n");
 | 
				
			||||||
 | 
						va_end(arglist);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						exit(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int apm_change(apm_info *cur) {
 | 
				
			||||||
 | 
						static int ac_line_status = 0, battery_status = 0, battery_flags = 0,
 | 
				
			||||||
 | 
							battery_percentage = 0, battery_time = 0, using_minutes = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						int i = cur->ac_line_status     == ac_line_status     &&
 | 
				
			||||||
 | 
							cur->battery_status     == battery_status     &&
 | 
				
			||||||
 | 
							cur->battery_flags      == battery_flags      &&
 | 
				
			||||||
 | 
							cur->battery_percentage == battery_percentage &&
 | 
				
			||||||
 | 
							cur->battery_time       == battery_time       &&
 | 
				
			||||||
 | 
							cur->using_minutes      == using_minutes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ac_line_status = cur->ac_line_status;
 | 
				
			||||||
 | 
						battery_status = cur->battery_status;
 | 
				
			||||||
 | 
						battery_flags = cur->battery_flags;
 | 
				
			||||||
 | 
						battery_percentage = cur->battery_percentage;
 | 
				
			||||||
 | 
						battery_time = cur->battery_time;
 | 
				
			||||||
 | 
						using_minutes = cur->using_minutes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return i;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Calculate battery estimate */
 | 
				
			||||||
 | 
					void estimate_timeleft(apm_info *cur_info) {
 | 
				
			||||||
 | 
						/* Time of the last estimate */
 | 
				
			||||||
 | 
						static time_t estimate_time = 0;
 | 
				
			||||||
 | 
						/* Estimated time left */
 | 
				
			||||||
 | 
						static time_t estimate = 0;
 | 
				
			||||||
 | 
						/* Time when we last noticed a battery level change */
 | 
				
			||||||
 | 
						static time_t battery_change_time = 0;
 | 
				
			||||||
 | 
						/* The previous estimation we had before the battery level changed */
 | 
				
			||||||
 | 
						static time_t prev_estimate = 0;
 | 
				
			||||||
 | 
						/* Percentage at the last estimate */
 | 
				
			||||||
 | 
						static short percent = 0;
 | 
				
			||||||
 | 
						/* Where we charging or discharging the last time we were called? */
 | 
				
			||||||
 | 
						static short was_charging = 1;
 | 
				
			||||||
 | 
						/* Have we made a guess lately? */
 | 
				
			||||||
 | 
						static short guessed_lately = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						time_t t;
 | 
				
			||||||
 | 
						int interval;
 | 
				
			||||||
 | 
						short is_charging = cur_info->battery_flags & BATTERY_FLAGS_CHARGING;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errno = 0;
 | 
				
			||||||
 | 
						if (time(&t) == ((time_t)-1) && errno != 0)
 | 
				
			||||||
 | 
							goto estim_values;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((
 | 
				
			||||||
 | 
						     /* AC is on and battery is not charging anymore or ... */
 | 
				
			||||||
 | 
						     (cur_info->ac_line_status == AC_LINE_STATUS_ON) && !is_charging
 | 
				
			||||||
 | 
						     ) ||
 | 
				
			||||||
 | 
						    (
 | 
				
			||||||
 | 
						     /* ... the charging state has changed */
 | 
				
			||||||
 | 
						     is_charging ^ was_charging
 | 
				
			||||||
 | 
						     )) {
 | 
				
			||||||
 | 
							/* Reset counters */
 | 
				
			||||||
 | 
							battery_change_time = t;
 | 
				
			||||||
 | 
							estimate = -1;
 | 
				
			||||||
 | 
							guessed_lately = 0;
 | 
				
			||||||
 | 
							estimate_time = t;
 | 
				
			||||||
 | 
							prev_estimate = 0;
 | 
				
			||||||
 | 
							goto estim_values;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* No change: decrease estimate */
 | 
				
			||||||
 | 
						if ((percent - cur_info->battery_percentage)
 | 
				
			||||||
 | 
						    / granularity_estimate_remaining == 0) {
 | 
				
			||||||
 | 
							estimate -= t - estimate_time;
 | 
				
			||||||
 | 
							estimate_time = t;
 | 
				
			||||||
 | 
							if (guessed_lately && estimate < 0)
 | 
				
			||||||
 | 
								estimate = 0;
 | 
				
			||||||
 | 
							goto estim_values;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* The battery level changed: calculate estimate based
 | 
				
			||||||
 | 
						 * on change speed and previous estimate */
 | 
				
			||||||
 | 
						guessed_lately = 1;
 | 
				
			||||||
 | 
						estimate_time = t;
 | 
				
			||||||
 | 
						interval = estimate_time - battery_change_time;
 | 
				
			||||||
 | 
						prev_estimate = estimate;
 | 
				
			||||||
 | 
						battery_change_time = estimate_time;
 | 
				
			||||||
 | 
						estimate = (is_charging
 | 
				
			||||||
 | 
							    ? (cur_info->battery_percentage - 100)
 | 
				
			||||||
 | 
							    : cur_info->battery_percentage)
 | 
				
			||||||
 | 
							* interval / (percent - cur_info->battery_percentage);
 | 
				
			||||||
 | 
						if (prev_estimate > 0)
 | 
				
			||||||
 | 
							estimate = (estimate * 2 + prev_estimate) / 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					estim_values:
 | 
				
			||||||
 | 
						percent = cur_info->battery_percentage;
 | 
				
			||||||
 | 
						was_charging = is_charging;
 | 
				
			||||||
 | 
						cur_info->battery_time = estimate;
 | 
				
			||||||
 | 
						if (estimate < 0)
 | 
				
			||||||
 | 
							estimate = 0;
 | 
				
			||||||
 | 
						cur_info->using_minutes = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Load up the images this program uses. */
 | 
				
			||||||
 | 
					void load_images() {
 | 
				
			||||||
 | 
					  	int x;
 | 
				
			||||||
 | 
						char fn[128]; /* enough? */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  	for(x=0; x < NUM_IMAGES; x++) {
 | 
				
			||||||
 | 
					         	sprintf(fn, "%s/%s.xpm", ICONDIR, image_info[x].filename);
 | 
				
			||||||
 | 
					                if (XpmReadFileToPixmap(display, root, fn, &images[x], NULL, NULL)) {
 | 
				
			||||||
 | 
							  	/* Check in current direcotry for fallback. */
 | 
				
			||||||
 | 
							  	sprintf(fn, "%s.xpm", image_info[x].filename);
 | 
				
			||||||
 | 
							  	if (XpmReadFileToPixmap(display, root, fn, &images[x], NULL, NULL)) {
 | 
				
			||||||
 | 
								 	error("Failed to load %s\n",fn);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void load_audio() {
 | 
				
			||||||
 | 
						int fd;
 | 
				
			||||||
 | 
						struct stat s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						crit_audio = NULL;
 | 
				
			||||||
 | 
						if (crit_audio_fn == NULL) {
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						fd = open(crit_audio_fn, 0);
 | 
				
			||||||
 | 
						if (fd == -1) {
 | 
				
			||||||
 | 
							error("unable to open audio file");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if (fstat(fd, &s) == 0) {
 | 
				
			||||||
 | 
							crit_audio_size = s.st_size;
 | 
				
			||||||
 | 
							crit_audio = malloc(crit_audio_size);
 | 
				
			||||||
 | 
							/* XXX: make this more robust? (loop?) */
 | 
				
			||||||
 | 
							if (read(fd, crit_audio, crit_audio_size) != crit_audio_size) {
 | 
				
			||||||
 | 
								free(crit_audio);
 | 
				
			||||||
 | 
								crit_audio = NULL;
 | 
				
			||||||
 | 
								error("unable to read audio file");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						close(fd);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Returns the display to run on (or NULL for default). */
 | 
				
			||||||
 | 
					char *parse_commandline(int argc, char *argv[]) {
 | 
				
			||||||
 | 
						int c=0;
 | 
				
			||||||
 | 
						char *ret=NULL;
 | 
				
			||||||
 | 
					        char *s;
 | 
				
			||||||
 | 
						extern char *optarg;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					  	while (c != -1) {
 | 
				
			||||||
 | 
					  		c=getopt(argc, argv, "hd:g:if:b:w:c:l:es:a:");
 | 
				
			||||||
 | 
							switch (c) {
 | 
				
			||||||
 | 
							  case 'h':
 | 
				
			||||||
 | 
								printf("Usage: wmbattery [options]\n");
 | 
				
			||||||
 | 
					              		printf("\t-d <display>\tselects target display\n");
 | 
				
			||||||
 | 
					               		printf("\t-h\t\tdisplay this help\n");
 | 
				
			||||||
 | 
					                        printf("\t-g +x+y\t\tposition of the window\n");
 | 
				
			||||||
 | 
					                        printf("\t-i start \n");
 | 
				
			||||||
 | 
								printf("\t-b num\t\tnumber of battery to display\n");
 | 
				
			||||||
 | 
								printf("\t-w secs\t\tseconds between updates\n");
 | 
				
			||||||
 | 
								printf("\t-l percent\tlow percentage\n");
 | 
				
			||||||
 | 
								printf("\t-c percent\tcritical percentage\n");
 | 
				
			||||||
 | 
								printf("\t-e\t\tuse own time estimates\n");
 | 
				
			||||||
 | 
								printf("\t-s granularity\tignore fluctuations less than granularity%% (implies -e)\n");
 | 
				
			||||||
 | 
								printf("\t-a file\t\twhen critical send file to /dev/audio\n");
 | 
				
			||||||
 | 
					               		exit(0);
 | 
				
			||||||
 | 
							 	break;
 | 
				
			||||||
 | 
							  case 'd':
 | 
				
			||||||
 | 
							  	ret=strdup(optarg);
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
							  case 'g':
 | 
				
			||||||
 | 
								s = strtok(optarg, "+");
 | 
				
			||||||
 | 
								if (s) {
 | 
				
			||||||
 | 
									pos[0]=atoi(s);
 | 
				
			||||||
 | 
									if ((s = strtok(NULL, "+")) != NULL) {
 | 
				
			||||||
 | 
										pos[1]=atoi(s);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									else {
 | 
				
			||||||
 | 
										pos[0]=0;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'i':
 | 
				
			||||||
 | 
								initial_state = IconicState;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'b':
 | 
				
			||||||
 | 
								battnum = atoi(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'w':
 | 
				
			||||||
 | 
								delay = atoi(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'l':
 | 
				
			||||||
 | 
								low_pct = atoi(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'c':
 | 
				
			||||||
 | 
								critical_pct = atoi(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'e':
 | 
				
			||||||
 | 
								always_estimate_remaining = 1;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 's':
 | 
				
			||||||
 | 
								always_estimate_remaining = 1;
 | 
				
			||||||
 | 
								granularity_estimate_remaining = atoi(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							  case 'a':
 | 
				
			||||||
 | 
								crit_audio_fn = strdup(optarg);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Sets up the window and icon and all the nasty X stuff. */
 | 
				
			||||||
 | 
					void make_window(char *display_name, int argc, char *argv[]) {
 | 
				
			||||||
 | 
						XClassHint classhint;
 | 
				
			||||||
 | 
						char *wname = argv[0];
 | 
				
			||||||
 | 
						XTextProperty name;
 | 
				
			||||||
 | 
						XGCValues gcv;
 | 
				
			||||||
 | 
						int dummy=0, borderwidth = 1;
 | 
				
			||||||
 | 
						XSizeHints sizehints;
 | 
				
			||||||
 | 
						XWMHints wmhints;
 | 
				
			||||||
 | 
						Pixel back_pix, fore_pix;
 | 
				
			||||||
 | 
						Pixmap pixmask;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!(display = XOpenDisplay(display_name)))
 | 
				
			||||||
 | 
							error("can't open display %s",XDisplayName(display_name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						screen=DefaultScreen(display);
 | 
				
			||||||
 | 
						root=RootWindow(display, screen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Create window. */
 | 
				
			||||||
 | 
						sizehints.flags = USSize | USPosition;
 | 
				
			||||||
 | 
						sizehints.x = 0;
 | 
				
			||||||
 | 
						sizehints.y = 0;
 | 
				
			||||||
 | 
						XWMGeometry(display, screen, "", NULL, borderwidth,
 | 
				
			||||||
 | 
							    &sizehints, &sizehints.x, &sizehints.y,
 | 
				
			||||||
 | 
							    &sizehints.width, &sizehints.height, &dummy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sizehints.width = 64;
 | 
				
			||||||
 | 
						sizehints.height = 64;
 | 
				
			||||||
 | 
						sizehints.x = pos[0];
 | 
				
			||||||
 | 
						sizehints.y = pos[1];
 | 
				
			||||||
 | 
						back_pix = WhitePixel(display, screen);
 | 
				
			||||||
 | 
						fore_pix = BlackPixel(display, screen);
 | 
				
			||||||
 | 
						win = XCreateSimpleWindow(display, root, sizehints.x, sizehints.y,
 | 
				
			||||||
 | 
									  sizehints.width, sizehints.height,
 | 
				
			||||||
 | 
									  borderwidth, fore_pix, back_pix);
 | 
				
			||||||
 | 
						iconwin = XCreateSimpleWindow(display, win, sizehints.x,
 | 
				
			||||||
 | 
									      sizehints.y, sizehints.width,
 | 
				
			||||||
 | 
									      sizehints.height, borderwidth,
 | 
				
			||||||
 | 
									      fore_pix, back_pix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Activate hints */
 | 
				
			||||||
 | 
						XSetWMNormalHints(display, win, &sizehints);
 | 
				
			||||||
 | 
						classhint.res_name = wname;
 | 
				
			||||||
 | 
						classhint.res_class = wname;
 | 
				
			||||||
 | 
						XSetClassHint(display, win, &classhint);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						if (! XStringListToTextProperty(&wname, 1, &name))
 | 
				
			||||||
 | 
							error("Can't allocate window name.");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XSetWMName(display, win, &name);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						/* Create GC for drawing */
 | 
				
			||||||
 | 
						gcv.foreground = fore_pix;
 | 
				
			||||||
 | 
						gcv.background = back_pix;
 | 
				
			||||||
 | 
						gcv.graphics_exposures = 0;
 | 
				
			||||||
 | 
						NormalGC = XCreateGC(display, root, 
 | 
				
			||||||
 | 
								     GCForeground | GCBackground | GCGraphicsExposures,
 | 
				
			||||||
 | 
								     &gcv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pixmask = XCreateBitmapFromData(display, win, mask_bits,
 | 
				
			||||||
 | 
										mask_width,mask_height);
 | 
				
			||||||
 | 
						XShapeCombineMask(display, win, ShapeBounding, 0, 0,
 | 
				
			||||||
 | 
								  pixmask, ShapeSet);
 | 
				
			||||||
 | 
						XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0,
 | 
				
			||||||
 | 
								  pixmask, ShapeSet);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						wmhints.initial_state = initial_state;
 | 
				
			||||||
 | 
						wmhints.icon_window = iconwin;
 | 
				
			||||||
 | 
						wmhints.icon_x = sizehints.x;
 | 
				
			||||||
 | 
						wmhints.icon_y = sizehints.y;
 | 
				
			||||||
 | 
						wmhints.window_group = win;
 | 
				
			||||||
 | 
						wmhints.flags = StateHint | IconWindowHint | 
 | 
				
			||||||
 | 
					    			IconPositionHint | WindowGroupHint;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						XSetWMHints(display, win, &wmhints);
 | 
				
			||||||
 | 
						XSetCommand(display, win, argv, argc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XSelectInput(display, iconwin, ExposureMask);
 | 
				
			||||||
 | 
						XSelectInput(display, win, ExposureMask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XMapWindow(display, win);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void flush_expose(Window w) {
 | 
				
			||||||
 | 
						XEvent dummy;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						while (XCheckTypedWindowEvent(display, w, Expose, &dummy));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void redraw_window() {
 | 
				
			||||||
 | 
						XCopyArea(display, images[FACE], iconwin, NormalGC, 0, 0,
 | 
				
			||||||
 | 
							  image_info[FACE].width, image_info[FACE].height, 0,0);
 | 
				
			||||||
 | 
						flush_expose(iconwin);
 | 
				
			||||||
 | 
						XCopyArea(display, images[FACE], win, NormalGC, 0, 0, 
 | 
				
			||||||
 | 
							  image_info[FACE].width, image_info[FACE].height, 0,0);
 | 
				
			||||||
 | 
						flush_expose(win);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Display an image, using XCopyArea. Can display only part of an image,
 | 
				
			||||||
 | 
					 * located anywhere.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void copy_image(int image, int xoffset, int yoffset,
 | 
				
			||||||
 | 
					                int width, int height, int x, int y) {
 | 
				
			||||||
 | 
						XCopyArea(display, images[image], images[FACE], NormalGC,
 | 
				
			||||||
 | 
						          xoffset, yoffset, width, height, x, y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Display a letter in one of two fonts, at the specified x position.
 | 
				
			||||||
 | 
					 * Note that 10 is passed for special characters `:' or `1' at the 
 | 
				
			||||||
 | 
					 * end of the font. 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void draw_letter(int letter, int font, int x) {
 | 
				
			||||||
 | 
						copy_image(font, image_info[font].charwidth * letter, 0,
 | 
				
			||||||
 | 
							   image_info[font].charwidth, image_info[font].height,
 | 
				
			||||||
 | 
							   x, image_info[font].y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Display an image at its normal location. */
 | 
				
			||||||
 | 
					void draw_image(int image) {
 | 
				
			||||||
 | 
					  	copy_image(image, 0, 0, 
 | 
				
			||||||
 | 
							   image_info[image].width, image_info[image].height,
 | 
				
			||||||
 | 
							   image_info[image].x, image_info[image].y);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void recalc_window(apm_info cur_info) {
 | 
				
			||||||
 | 
						int time_left, hour_left, min_left, digit, x;
 | 
				
			||||||
 | 
						static int blinked = 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Display if it's plugged in. */
 | 
				
			||||||
 | 
					      	switch (cur_info.ac_line_status) {
 | 
				
			||||||
 | 
						  case AC_LINE_STATUS_ON:
 | 
				
			||||||
 | 
							draw_image(PLUGGED);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
					       	  default:
 | 
				
			||||||
 | 
							draw_image(UNPLUGGED);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					      	/* Display the appropriate color battery. */
 | 
				
			||||||
 | 
					      	switch (cur_info.battery_status) {
 | 
				
			||||||
 | 
						  case BATTERY_STATUS_HIGH:
 | 
				
			||||||
 | 
						  case BATTERY_STATUS_CHARGING:
 | 
				
			||||||
 | 
							draw_image(BATTERY_HIGH);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						  case BATTERY_STATUS_LOW:
 | 
				
			||||||
 | 
							draw_image(BATTERY_LOW);
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						  case BATTERY_STATUS_CRITICAL: /* blinking red battery */
 | 
				
			||||||
 | 
							if (blinked)
 | 
				
			||||||
 | 
								draw_image(BATTERY_CRITICAL);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								draw_image(BATTERY_BLINK);
 | 
				
			||||||
 | 
							blinked=!blinked;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						  default:
 | 
				
			||||||
 | 
							draw_image(BATTERY_NONE);
 | 
				
			||||||
 | 
					      	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      	/* Show if the battery is charging. */
 | 
				
			||||||
 | 
					  	if (cur_info.battery_flags & BATTERY_FLAGS_CHARGING) {
 | 
				
			||||||
 | 
							draw_image(CHARGING);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					  	else {
 | 
				
			||||||
 | 
							draw_image(NOCHARGING);
 | 
				
			||||||
 | 
					      	}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     	/*
 | 
				
			||||||
 | 
					       	 * Display the percent left dial. This has the side effect of
 | 
				
			||||||
 | 
					         * clearing the time left field. 
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					  	x=DIAL_MULTIPLIER * cur_info.battery_percentage;
 | 
				
			||||||
 | 
					      	if (x >= 0) {
 | 
				
			||||||
 | 
							/* Start by displaying bright on the dial. */
 | 
				
			||||||
 | 
							copy_image(DIAL_BRIGHT, 0, 0,
 | 
				
			||||||
 | 
								   x, image_info[DIAL_BRIGHT].height,
 | 
				
			||||||
 | 
								   image_info[DIAL_BRIGHT].x,
 | 
				
			||||||
 | 
								   image_info[DIAL_BRIGHT].y);
 | 
				
			||||||
 | 
					      	}
 | 
				
			||||||
 | 
					      	/* Now display dim on the remainder of the dial. */
 | 
				
			||||||
 | 
					  	copy_image(DIAL_DIM, x, 0,
 | 
				
			||||||
 | 
							   image_info[DIAL_DIM].width - x,
 | 
				
			||||||
 | 
							   image_info[DIAL_DIM].height,
 | 
				
			||||||
 | 
							   image_info[DIAL_DIM].x + x,
 | 
				
			||||||
 | 
							   image_info[DIAL_DIM].y);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
						/* Show percent remaining */
 | 
				
			||||||
 | 
					      	if (cur_info.battery_percentage >= 0) {
 | 
				
			||||||
 | 
					        	digit = cur_info.battery_percentage / 10;
 | 
				
			||||||
 | 
					       		if (digit == 10) {
 | 
				
			||||||
 | 
							  	/* 11 is the `1' for the hundreds place. */
 | 
				
			||||||
 | 
						  		draw_letter(11,SMALLFONT,HUNDREDS_OFFSET);
 | 
				
			||||||
 | 
						  		digit=0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							draw_letter(digit,SMALLFONT,TENS_OFFSET);
 | 
				
			||||||
 | 
							digit = cur_info.battery_percentage % 10;
 | 
				
			||||||
 | 
							draw_letter(digit,SMALLFONT,ONES_OFFSET);
 | 
				
			||||||
 | 
					      	}
 | 
				
			||||||
 | 
					  	else {
 | 
				
			||||||
 | 
						  	/* There is no battery, so we need to dim out the
 | 
				
			||||||
 | 
							 * percent sign that is normally bright. */
 | 
				
			||||||
 | 
						  	draw_letter(10,SMALLFONT,PERCENT_OFFSET);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      	/* Show time left */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* A negative number means that it is unknown. Dim the field. */
 | 
				
			||||||
 | 
						if (cur_info.battery_time < 0) {
 | 
				
			||||||
 | 
							draw_letter(10, BIGFONT, COLON_OFFSET);
 | 
				
			||||||
 | 
							redraw_window();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (cur_info.using_minutes)
 | 
				
			||||||
 | 
					        	time_left = cur_info.battery_time;
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        	time_left = cur_info.battery_time / 60; 
 | 
				
			||||||
 | 
					        hour_left = time_left / 60;
 | 
				
			||||||
 | 
					        min_left = time_left % 60;
 | 
				
			||||||
 | 
					        digit = hour_left / 10;
 | 
				
			||||||
 | 
						draw_letter(digit,BIGFONT,HOURS_TENS_OFFSET);
 | 
				
			||||||
 | 
					        digit = hour_left % 10;
 | 
				
			||||||
 | 
						draw_letter(digit,BIGFONT,HOURS_ONES_OFFSET);
 | 
				
			||||||
 | 
					       	digit = min_left / 10;
 | 
				
			||||||
 | 
					        draw_letter(digit,BIGFONT,MINUTES_TENS_OFFSET);
 | 
				
			||||||
 | 
					        digit = min_left % 10;
 | 
				
			||||||
 | 
					        draw_letter(digit,BIGFONT,MINUTES_ONES_OFFSET);
 | 
				
			||||||
 | 
					      	
 | 
				
			||||||
 | 
						redraw_window();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void snd_crit() {
 | 
				
			||||||
 | 
						int audio, n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (crit_audio) {
 | 
				
			||||||
 | 
							audio = open("/dev/audio", O_WRONLY);
 | 
				
			||||||
 | 
							if (audio >= 0) {
 | 
				
			||||||
 | 
								n = write(audio, crit_audio, crit_audio_size);
 | 
				
			||||||
 | 
								if (n != crit_audio_size) {
 | 
				
			||||||
 | 
									fprintf(stderr, "write failed (%d/%d bytes)\n", n, crit_audio_size);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								close(audio);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void alarmhandler(int sig) {
 | 
				
			||||||
 | 
						apm_info cur_info;
 | 
				
			||||||
 | 
						int old_status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						old_status = cur_info.battery_status;
 | 
				
			||||||
 | 
					#ifdef UPOWER
 | 
				
			||||||
 | 
						if (use_upower) {
 | 
				
			||||||
 | 
							if (upower_read(1, &cur_info) != 0)
 | 
				
			||||||
 | 
								error("Cannot read upower information.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (use_acpi) {
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
						if (use_acpi) {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
							if (acpi_read(battnum, &cur_info) != 0)
 | 
				
			||||||
 | 
								error("Cannot read ACPI information.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#ifdef HAL
 | 
				
			||||||
 | 
						else if (use_simplehal) {
 | 
				
			||||||
 | 
							if (simplehal_read(battnum, &cur_info) != 0)
 | 
				
			||||||
 | 
								error("Cannot read HAL information.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						else if (! use_sonypi) {
 | 
				
			||||||
 | 
							if (apm_read(&cur_info) != 0)
 | 
				
			||||||
 | 
								error("Cannot read APM information.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							if (sonypi_read(&cur_info) != 0)
 | 
				
			||||||
 | 
								error("Cannot read sonypi information.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Always calculate remaining lifetime? apm and acpi both use a
 | 
				
			||||||
 | 
						 * negative number here to indicate error, missing battery, or
 | 
				
			||||||
 | 
						 * cannot determine time. */
 | 
				
			||||||
 | 
						if (always_estimate_remaining || cur_info.battery_time < 0)
 | 
				
			||||||
 | 
							estimate_timeleft(&cur_info);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* Override the battery status? */
 | 
				
			||||||
 | 
						if ((low_pct > -1 || critical_pct > -1) && 
 | 
				
			||||||
 | 
						    cur_info.ac_line_status != AC_LINE_STATUS_ON) {
 | 
				
			||||||
 | 
							if (cur_info.battery_percentage <= critical_pct)
 | 
				
			||||||
 | 
								cur_info.battery_status = BATTERY_STATUS_CRITICAL;
 | 
				
			||||||
 | 
							else if (cur_info.battery_percentage <= low_pct)
 | 
				
			||||||
 | 
								cur_info.battery_status = BATTERY_STATUS_LOW;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								cur_info.battery_status = BATTERY_STATUS_HIGH;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						/* If APM data changes redraw and wait for next update */
 | 
				
			||||||
 | 
						/* Always redraw if the status is critical, to make it blink. */
 | 
				
			||||||
 | 
						if (!apm_change(&cur_info) || cur_info.battery_status == BATTERY_STATUS_CRITICAL)
 | 
				
			||||||
 | 
							recalc_window(cur_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ((old_status == BATTERY_STATUS_HIGH) &&
 | 
				
			||||||
 | 
						    (cur_info.battery_status == BATTERY_STATUS_LOW)) {
 | 
				
			||||||
 | 
							snd_crit();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (cur_info.battery_status == BATTERY_STATUS_CRITICAL) {
 | 
				
			||||||
 | 
							snd_crit();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						alarm(delay);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void check_battery_num(int real, int requested) {
 | 
				
			||||||
 | 
						if (requested > real || requested < 1) {
 | 
				
			||||||
 | 
							error("There %s only %i batter%s, and you asked for number %i.",
 | 
				
			||||||
 | 
								real == 1 ? "is" : "are",
 | 
				
			||||||
 | 
								real,
 | 
				
			||||||
 | 
								real == 1 ? "y" : "ies",
 | 
				
			||||||
 | 
								requested);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char *argv[]) {
 | 
				
			||||||
 | 
						make_window(parse_commandline(argc, argv), argc ,argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*  Check for APM support (returns 0 on success). */
 | 
				
			||||||
 | 
						if (apm_exists() == 0) {
 | 
				
			||||||
 | 
							if (! delay)
 | 
				
			||||||
 | 
								delay = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#ifdef HAL
 | 
				
			||||||
 | 
						/* Check for hal support. */
 | 
				
			||||||
 | 
						else if (simplehal_supported()) {
 | 
				
			||||||
 | 
							use_simplehal = 1;
 | 
				
			||||||
 | 
							if (! delay)
 | 
				
			||||||
 | 
								delay = 2;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef UPOWER
 | 
				
			||||||
 | 
						else if (upower_supported()) {
 | 
				
			||||||
 | 
							use_upower = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						/* Check for ACPI support. */
 | 
				
			||||||
 | 
						else if (acpi_supported() && acpi_batt_count > 0) {
 | 
				
			||||||
 | 
							check_battery_num(acpi_batt_count, battnum);
 | 
				
			||||||
 | 
							use_acpi = 1;
 | 
				
			||||||
 | 
							if (! delay)
 | 
				
			||||||
 | 
								delay = 3; /* slow interface! */
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (sonypi_supported()) {
 | 
				
			||||||
 | 
							use_sonypi = 1;
 | 
				
			||||||
 | 
							low_pct = 10;
 | 
				
			||||||
 | 
							critical_pct = 5;
 | 
				
			||||||
 | 
							if (! delay)
 | 
				
			||||||
 | 
								delay = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							error("No APM, ACPI, UPOWER, HAL or SPIC support detected.");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						load_images();
 | 
				
			||||||
 | 
					        load_audio();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						signal(SIGALRM, alarmhandler);
 | 
				
			||||||
 | 
						alarmhandler(SIGALRM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						while (1) {
 | 
				
			||||||
 | 
							XEvent ev;
 | 
				
			||||||
 | 
							XNextEvent(display, &ev);
 | 
				
			||||||
 | 
							if (ev.type == Expose)
 | 
				
			||||||
 | 
								redraw_window();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										70
									
								
								wmbattery/wmbattery.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								wmbattery/wmbattery.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,70 @@
 | 
				
			||||||
 | 
					#include "apm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
						Pixmap pixmap;
 | 
				
			||||||
 | 
						Pixmap mask;
 | 
				
			||||||
 | 
					  	XpmAttributes attributes;
 | 
				
			||||||
 | 
					} XpmIcon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef struct image_info_type {
 | 
				
			||||||
 | 
					  	const char* filename;
 | 
				
			||||||
 | 
					  	const int width;
 | 
				
			||||||
 | 
					  	const int height;
 | 
				
			||||||
 | 
					  	const int x;
 | 
				
			||||||
 | 
					  	const int y;
 | 
				
			||||||
 | 
					  	const int charwidth;
 | 
				
			||||||
 | 
					} image_info_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Assign reference numbers to all images that are loaded. */
 | 
				
			||||||
 | 
					#define SMALLFONT 0
 | 
				
			||||||
 | 
					#define BIGFONT 1
 | 
				
			||||||
 | 
					#define BATTERY_HIGH 2
 | 
				
			||||||
 | 
					#define BATTERY_LOW 3
 | 
				
			||||||
 | 
					#define BATTERY_CRITICAL 4
 | 
				
			||||||
 | 
					#define BATTERY_NONE 5
 | 
				
			||||||
 | 
					#define BATTERY_BLINK 6
 | 
				
			||||||
 | 
					#define UNPLUGGED 7
 | 
				
			||||||
 | 
					#define PLUGGED 8
 | 
				
			||||||
 | 
					#define NOCHARGING 9
 | 
				
			||||||
 | 
					#define CHARGING 10
 | 
				
			||||||
 | 
					#define DIAL_BRIGHT 11
 | 
				
			||||||
 | 
					#define DIAL_DIM 12
 | 
				
			||||||
 | 
					#define FACE 13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NUM_IMAGES 14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * An array of the filenames of all images to load (minus .xpm extention),
 | 
				
			||||||
 | 
					 * plus the size of the image, where to draw it on the icon, etc
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					static struct image_info_type image_info[] = {
 | 
				
			||||||
 | 
					  {"smallfont",7,67,0,45,6},
 | 
				
			||||||
 | 
					  {"bigfont",9,73,0,23,7},
 | 
				
			||||||
 | 
					  {"battery_high",25,13,33,42,0},
 | 
				
			||||||
 | 
					  {"battery_medium",25,13,33,42,0},
 | 
				
			||||||
 | 
					  {"battery_low",25,13,33,42,0},
 | 
				
			||||||
 | 
					  {"battery_none",25,13,33,42,0},
 | 
				
			||||||
 | 
					  {"battery_blink",25,13,33,42,0},
 | 
				
			||||||
 | 
					  {"unplugged",10,8,6,45,0},
 | 
				
			||||||
 | 
					  {"plugged",10,8,6,45,0},
 | 
				
			||||||
 | 
					  {"nocharging",15,9,17,43,0},
 | 
				
			||||||
 | 
					  {"charging",15,9,17,43,0},
 | 
				
			||||||
 | 
					  {"dial_bright",56,31,4,4,0},
 | 
				
			||||||
 | 
					  {"dial_dim",56,31,4,4,0},
 | 
				
			||||||
 | 
					  {"face",64,64,0,0,0},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DIAL_MULTIPLIER 0.56
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Locations of letters in the percent remaining display. */
 | 
				
			||||||
 | 
					#define HUNDREDS_OFFSET 35
 | 
				
			||||||
 | 
					#define TENS_OFFSET 37
 | 
				
			||||||
 | 
					#define ONES_OFFSET 43
 | 
				
			||||||
 | 
					#define PERCENT_OFFSET 49
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Locations of letters in the time remaining display. */
 | 
				
			||||||
 | 
					#define HOURS_TENS_OFFSET 15
 | 
				
			||||||
 | 
					#define HOURS_ONES_OFFSET 23
 | 
				
			||||||
 | 
					#define COLON_OFFSET 30
 | 
				
			||||||
 | 
					#define MINUTES_TENS_OFFSET 34
 | 
				
			||||||
 | 
					#define MINUTES_ONES_OFFSET 41
 | 
				
			||||||
		Loading…
	
		Reference in a new issue