dockapps-43ddcdf/000077500000000000000000000000001256634747300141145ustar00rootroot00000000000000dockapps-43ddcdf/COPYING000066400000000000000000000432541256634747300151570ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, 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 Lesser 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. Copyright (C) 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 Street, 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. , 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 Lesser General Public License instead of this License. dockapps-43ddcdf/ChangeLog000066400000000000000000000040321256634747300156650ustar00rootroot00000000000000CHANGE LOG: ----------- 0.6 Increase significant digits. Patch by Antony Gelberg to fix Debian bug #320597 [1]. Obtained from the Debian package [2]. Fix typo in Makefile. Correctly create the directory /usr/share/man/man1 instead of /usr/share/man/man1/man1. Obtained from the Debian package [3]. Fix manpage spelling. Avoid Lintian warning in the Debian package. Obtained from [4]. Move changelog from README to new ChangeLog file. [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=320597 [2] https://sources.debian.net/src/wmcalc/0.5-1/debian/patches/ 10_bts-320597_increase_significant_digits.patch/ [3] https://sources.debian.net/src/wmcalc/0.5-1/debian/patches/ fix_makefile_typo.patch/ [4] https://sources.debian.net/src/wmcalc/0.5-1/debian/patches/ fix_manpage_spelling.patch/ 0.5 Add manpage from Debian. Update Makefile. Switch #include to #include . Fix -Wunused-but-set-variable compiler warnings. Fix -Warray-bounds compiler warning. Fix -Wunused-result compiler warning. Remove trailing whitespace. Remove redundant .wmcalc*; essentially the same as wmcalc.conf. Update COPYING from http://www.gnu.org/licenses/gpl-2.0.txt. Update README. Allow installation without root access. Fix -Woverflow compiler warnings. Remove C++ style comments. Maintained by Window Maker Developers Team 0.4 Added global config file Maintained by Gordon Fraser 0.3 Added "Locked" memory capabilities via config file General Code clean-up Keyboard Support - may not be platform independent 0.21 Added Display of memory locations containing non-zero data 0.2 First psuedo-major enhancements Added Memories, Config File, CalcStart button Bug Fix - Squared imaginary number is now negative 0.1 First real version. Limited functionality. 0.0 Original version. Very limited distribution, as it was not a functional calculator, but just tested the display. It was more of a proof of concept. dockapps-43ddcdf/Makefile000066400000000000000000000015431256634747300155570ustar00rootroot00000000000000LIBS = -lX11 -lXpm -lXext -lm CC = gcc TARGET = wmcalc OBJECTS = wmcalc.o readln.o wmcalcswitch.o wmcalcfunc.o CFLAGS = -O2 -Wall DESTDIR = PREFIX = /usr/local BINDIR = $(PREFIX)/bin MANDIR = $(PREFIX)/share/man/man1 CONF = /etc INSTALL = /usr/bin/install INSTALL_DIR = $(INSTALL) -d INSTALL_PROGRAM = $(INSTALL) INSTALL_FILE = $(INSTALL) -m 644 .c.o: $(CC) -DCONF=\"$(CONF)\" $(CPPFLAGS) $(CFLAGS) -c $< -o $*.o $(TARGET): $(OBJECTS) $(CC) $(LDFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) clean:: for i in $(OBJECTS); do if [ -e $$i ] ; then rm $$i; fi; done if [ -e $(TARGET) ] ; then rm $(TARGET); fi install:: $(INSTALL_DIR) $(DESTDIR)$(BINDIR) $(INSTALL_PROGRAM) wmcalc $(DESTDIR)$(BINDIR) $(INSTALL_DIR) $(DESTDIR)$(CONF) $(INSTALL_FILE) wmcalc.conf $(DESTDIR)$(CONF) $(INSTALL_DIR) $(DESTDIR)$(MANDIR) $(INSTALL_FILE) wmcalc.1 $(DESTDIR)$(MANDIR) dockapps-43ddcdf/README000066400000000000000000000153631256634747300150040ustar00rootroot00000000000000wmcalc ------------------------------------------------------------- Code is loosely based on wmppp, wmload, wmtime, wmcp, and asbutton Original Author: Edward H. Flora Current Maintainer: Window Maker Developers Team DESCRIPTION: ------------ wmcalc is a program designed to act as a simple four-function calculator. It is different from other calculator programs, however in that it is designed to take up very little desktop space. As such, it can be left running on the desktop at all times. It is intended to placed in the WindowMaker dock, or in Wharf under Afterstep, though it should run as well under any window manager. LICENSING: ---------- This program is released under the GPL license. A copy (in case you don't already have hundreds of them floating around) can be found in this distribution in the file COPYING. CONTRIBUTORS: ------------- Co-Developers: Rick Stuart Philippe Trbich Original Web Page Designs: Jon Bruno Thanks to: Ben Cohen original author of wmcp (et al.) The contributors listed above are not involved with the development of wmcalc. I'm listing them here as thanks for helping out, catching bugs in the code, etc. INSTALLATION: ------------- Compile it: make clean; make As root, install it: make install Optionally, copy the config file: cp wmcalc.conf ~/.wmcalc Run it: wmcalc & Grab the appicon and move it to the dock. Change the settings to start with Windowmaker Afterstep Wharf 1.6.??: (I don't use Afterstep anymore, so...) *Wharf wmcalc -Swallow "wmcalc" wmcalc & ***Note***: The appicon only has a two pixel border where you can grab and move it. It is easiest to grab along the bottom edge. If make doesn't work, you may need to fiddle with the settings in the Makefile. Tested on: (Well, it runs, I don't know if 'Tested' is quite right...) WindowMaker-0.62.1 X Clients: Red Hat 6.0, Kernel 2.2.8 USAGE: ------ usage: wmcalc [-g geometry] [-d dpy] [-v] [-f configfilename] [-h] -g Window Geometry - ie: 64x64+10+10 -d Display - ie: 127.0.0.1:0.0 -v Verbose Mode. -h Help. This message. -f Full path to configuration file to use. Buttons are defined as: ____________________ | x00 | where: x = 1 for Left Mouse Button | 0 1 2 3 4 5 6 7 8 9| x = 2 for Middle Mouse Button |--------------------| x = 3 for Right Mouse Button |x01 x02 x03 x04 x05 | |x06 x07 x08 x09 x10 | Note: the numbers 0..9 are the indicators |x11 x12 x13 x14 x15 | for memory cells 0..9 respectively |x16 x17 x18 x19 x20 | -------------------- Button Functions: 100 Reinitialize the calculator, and both Registers (Clear All) 200 Clear all the memory registers (0..10) 300 Clear the current number being entered only x11 Start a program defined by CalcStart variable in config file 1yy Perform function shown on button 2yy Recall number from memory location [0-9] to display for calculation if yy = 2,3,4, 7,8,9, 12, 13, 14, 17 otherwise, can run a user-defined function (not implemented) 3yy Store Displayed number in memory location [0-9] if yy = 2,3,4, 7,8,9, 12,13,14, 17 otherwise, can run a user-defined function (not implemented) 1xx Hopefully the other functions are obvious from their button graphics. NOTES: ------ I am sure that there are better ways to do some of the things that are done in wmcalc. In fact, wmcalc is basically a series of hacks, but appears to be stable... The configuration file (.wmcalc) is written by wmcalc whenever the user requests to store a number to memory. As a part of this process, a file is written to /tmp. If /tmp is not accessible, it tries in the user's home directory, as defined by the environment variable HOME. This file is erased as soon as it is written over the main configuration file. Changes made to the configuration file (other than memory stores) will not take effect until the next time wmcalc is started. Although one can only "Clear" all unlocked memory locations, one may clear the display and then "store" a '0' in the memory location, providing the ability to clear individual cells. The fonts are stored in charmap.xpm. This file may be edited to change colors or fonts, but the app must be recompiled for the changes to take effect. The buttons are located in calcbuttons.xpm. This file may be edited, though the borders should stay where they are unless you want to change the button regions that are hard coded. The background border is defined in backdrop.xpm. "C code. C code run. Run, code, run. PLEASE!?!?!?!?!?!?" TODO: ----- These are partially a dream list. I don't know when they'll get done, as I'm pretty busy at work. Anyone want to tackle these?? * Re-implement the register/display design to allow full double precision. * Add keyboard support (I've tried to do this, with no luck. Probably a 'focus' problem. * Add button press animation. * Add a log file, either as a paper tape implementation, or a file that one can intentionally write data to. (This could grow to a pipe to plotting programs, etc, though this is a bit extreme...) RPN: I have no intention at this time to add in an RPN format, as I personally do not like it. It should be noted that I have NOT used it extensively, and I've heard that I would like it. But, until then... BUGS: ----- Remember, they're just undocumented FEATURES!!! * The display can lose the last digit of a three character exponential notation number. * Due to an implementation fault, at every step of calculations, precision is lost, as the number is only as accurate at that displayed. * Order of operations: 1 + 2 * 5 = 15, not 11, as it should. * Changing sign when the display is blank results in "-0". Further entry yields "-05...," but this does not affect calculations. * Changes to the configuration file do not take effect until wmcalc is restarted. (Note that file is written whenever a "store memory location" is requested) Probably many more. Send comments (preferably with fixes) to I will happily include your name in the documentation for the program if you send me a bug report and the correction. This can be in the form of a patch file, or ASCII text to exchange, or an equivalent. Note, this program is written in C. Not C++. I'm not a computer science person, I don't do objects. Therefore, bug fixes that convert this to C++ don't count, since I would no longer be able to support the program. Of course, you can modify the code and release a new application. Thanks, and Good Luck. dockapps-43ddcdf/backdrop.xpm000066400000000000000000000122541256634747300164330ustar00rootroot00000000000000/* XPM */ static char * backdrop_xpm[] = { "64 64 59 1", " c None", ". c #F3F3F3", "+ c #000000", "@ c #E0E0E0", "# c #516161", "$ c #A2A2B2", "% c #A2A2A2", "& c #A292B2", "* c #92A2A2", "= c #A292A2", "- c #9292A2", "; c #929292", "> c #9282A2", ", c #829292", "' c #928292", ") c #828292", "! c #828282", "~ c #827192", "{ c #615161", "] c #92A2B2", "^ c #9292B2", "/ c #8292A2", "( c #8282A2", "_ c #718292", ": c #718282", "< c #C7C7C7", "[ c #003F18", "} c #C7C3C7", "| c #717182", "1 c #514151", "2 c #415151", "3 c #717171", "4 c #414151", "5 c #617182", "6 c #415141", "7 c #716182", "8 c #414141", "9 c #617171", "0 c #413041", "a c #304141", "b c #716171", "c c #616171", "d c #616182", "e c #303030", "f c #616161", "g c #303041", "h c #516171", "i c #304130", "j c #615171", "k c #203030", "l c #302030", "m c #515171", "n c #515161", "o c #827182", "p c #202030", "q c #717192", "r c #202020", "s c #515151", "t c #413051", "...............................................................+", ".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+", ".@$%$%&%&%&%&*=-&*=-=-=---=--;>;>;>;>,>,>,')',')')'))!)))!~!~!{+", ".@$$*$]$*$*$*&*&*^*-*-*-*-*-/---,-,-,>,>,(,>,(,),),)))))_)_):)#+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".++[[[+++[[[+++[[[+++[[[+++[[[+++[[[+++[[[+++[[[+++[[[+++[[[++<+", ".+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+[[[[[+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+", ".@=<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}||1+", ".@*<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}||2+", ".@=<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}|31+", ".@-<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}||4+", ".@=<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}|31+", ".@*<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}5|6+", ".@-<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}734+", ".@-<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}5|8+", ".@><+++++++++++++++++++++++++++++++++++++++++++++++++++++++}790+", ".@-<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}978+", ".@-<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}738+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}97a+", ".@><+++++++++++++++++++++++++++++++++++++++++++++++++++++++}790+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}97a+", ".@><+++++++++++++++++++++++++++++++++++++++++++++++++++++++}b90+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}97a+", ".@'<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}7c0+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}9da+", ".@><+++++++++++++++++++++++++++++++++++++++++++++++++++++++}bc0+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}9ca+", ".@'<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}cc0+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}9ca+", ".@'<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}bc0+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}cce+", ".@'<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}cfg+", ".@,<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}hci+", ".@'<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}jfg+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}cck+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}jfl+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}#ck+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}jfe+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}hck+", ".@~<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}j#l+", ".@_<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}#jk+", ".@)<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}jfl+", ".@:<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}#jk+", ".@~<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}j#l+", ".@:<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}#mk+", ".@~<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}{nl+", ".@:<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}#jk+", ".@~<+++++++++++++++++++++++++++++++++++++++++++++++++++++++}{nl+", ".@:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}#mk+", ".@~:o|o|o|o|o||373|373797379b9b9bcbcbccfcccfjfjfjfj#j#j#{n{n{np+", ".@:q:~:q:|||||||||9|5|979797979d9ccc9ccccchchc#jhj#j#j#m#mnm#nr+", ".@{snsnsns1s12121614181848t848080a0a0i0egegegelelelelklplrlrprp+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"}; dockapps-43ddcdf/calcbuttons.xpm000066400000000000000000000045351256634747300171720ustar00rootroot00000000000000/* XPM */ static char * calcbuttons_xpm[] = { "53 40 4 1", " c None", ". c #FFFFFF", "+ c #D5D6D5", "@ c #000000", "...........+.........+.........+.........+..........+", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++@+++@", ".++++@@@@++@.+@@@@@++@.++@@@+++@.++@@@+++@++++++@+++@", ".++++@+++++@.+++++@++@.+@+++@++@.+@+++@++@+++++@++++@", ".++++@+++++@.++++@+++@.++@@@+++@.+@+++@++@++++@+++++@", ".++@+@+++++@.+++@++++@.+@+++@++@.++@@@@++@+++@++++++@", ".+++@@+++++@.+++@++++@.+@+++@++@.+++++@++@++@+++++++@", ".++++@+++++@.+++@++++@.++@@@+++@.++@@@+++@++@+++++++@", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", "+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", "...........+.........+.........+.........+..........+", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", ".++++++@+++@.++++@+++@.+@@@@@++@.++@@@+++@++@+++@+++@", ".+++++++@++@.+@++@+++@.+@++++++@.+@++++++@+++@+@++++@", ".++++++@+++@.+@++@+++@.+@@@@+++@.+@@@@+++@++++@+++++@", ".++@+@+@@++@.+@@@@@++@.+++++@++@.+@+++@++@+++@+@++++@", ".+++@++++++@.++++@+++@.+@+++@++@.+@+++@++@++@+++@+++@", ".++@+@+++++@.++++@+++@.++@@@+++@.++@@@+++@++++++++++@", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", "+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", "...........+.........+.........+.........+..........+", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", ".+@@@@@@@@+@.++++@+++@.++@@@+++@.+@@@@+++@++++++++++@", ".+@++++++@+@.+++@@+++@.+@+++@++@.+++++@++@++++++++++@", ".+@@@@@@@@+@.++++@+++@.+++++@++@.++@@@+++@++@@@@@+++@", ".+@+@+@+@@+@.++++@+++@.++@@@+++@.+++++@++@++++++++++@", ".+@@+@+@+@+@.++++@+++@.+@++++++@.+@+++@++@++++++++++@", ".+@@@@@@@@+@.+++@@@++@.+@@@@@++@.++@@@+++@++++++++++@", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", "+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", "...........+.........+.........+.........+..........+", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", ".+++@+++@++@.++@@@+++@.++++++++@.++++++++@++++@+++++@", ".++@@@+@+++@.+@+++@++@.++++++++@.++@@@@++@++++@+++++@", ".+++@+@++++@.+@+++@++@.++++++++@.++++++++@++@@@@@+++@", ".++++@+++++@.+@+++@++@.++++++++@.++@@@@++@++++@+++++@", ".+++@++++++@.+@+++@++@.+++@@+++@.++++++++@++++@+++++@", ".++@++@@@++@.++@@@+++@.+++@@+++@.++++++++@++++++++++@", ".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", "+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@"}; dockapps-43ddcdf/charmap-colors.xpm000066400000000000000000000104611256634747300175560ustar00rootroot00000000000000/* XPM */ static char * charmap_colors_xpm[] = { "61 64 12 1", " c None", ". c #000000", "+ c #003F18", "@ c #00FF00", "# c #481814", "$ c #FF0000", "% c #000064", "& c #0048FC", "* c #474700", "= c #FFFF00", "- c #38184C", "; c #BA55D3", ".............................................................", ".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", ".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", ".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", ".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", ".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", ".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", ".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", ".............................................................", ".............................................................", ".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", ".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", ".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", ".............................................................", ".............................................................", ".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", ".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", ".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", ".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", ".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", ".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", ".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", ".............................................................", ".............................................................", ".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", ".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", ".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", ".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", ".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", ".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", ".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", ".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", ".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", ".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", ".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", ".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++..@@@..", ".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++.@@@@@.", ".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", ".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++..+++..", ".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++.+++++.", ".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", ".............................................................", ".$$$$$.&&&&&.=====.@@@@@.;;;;;.#####.%%%%%.*****.+++++.------"}; dockapps-43ddcdf/charmap.xpm000066400000000000000000000101771256634747300162630ustar00rootroot00000000000000/* XPM */ static char * charmap_xpm[] = { "61 63 5 1", " c None", ". c #000000", "+ c #003F18", "@ c #00FF00", "# c #D30000", ".............................................................", ".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", ".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", ".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", ".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", ".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", ".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", ".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", ".............................................................", ".............................................................", ".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", ".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", ".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", ".............................................................", ".............................................................", ".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", ".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", ".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", ".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", ".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", ".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", ".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", ".............................................................", ".............................................................", ".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", ".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", ".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", ".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", ".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", ".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", ".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", ".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", ".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", ".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", ".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..###..", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.#####.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", "............................................................."}; dockapps-43ddcdf/charmap_old.xpm000066400000000000000000000101601256634747300171110ustar00rootroot00000000000000/* XPM */ static char * charmap_xpm[] = { "61 63 4 1", " c None", ". c #000000", "+ c #003F18", "@ c #00FF00", ".............................................................", ".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", ".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", ".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", ".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", ".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", ".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", ".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", ".............................................................", ".............................................................", ".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", ".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", ".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", ".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", ".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", ".............................................................", ".............................................................", ".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", ".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", ".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", ".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", ".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", ".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", ".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", ".............................................................", ".............................................................", ".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", ".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", ".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", ".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", ".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", ".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", ".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", ".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", ".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", ".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", ".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".............................................................", ".............................................................", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..+++..", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", ".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", "............................................................."}; dockapps-43ddcdf/main.xpm000066400000000000000000000106141256634747300155700ustar00rootroot00000000000000/* XPM */ static char * main_xpm[] = { "64 64 6 1", " c None", ". c #000000", "+ c #C7C7C7", "@ c #003F18", "# c #FFFFFF", "$ c #D5D6D5", " ", " ", " ", " ", " ..............................................................", " .............................................................+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .............................................................+", " ..@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@..+", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", " .............................................................+", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", " .###########$#########$#########$#########$##########$.+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$.$$$..+ ", " .#$$$$....$$.#$.....$$.#$$...$$$.#$$...$$$.$$$$$$.$$$..+ ", " .#$$$$.$$$$$.#$$$$$.$$.#$.$$$.$$.#$.$$$.$$.$$$$$.$$$$..+ ", " .#$$$$.$$$$$.#$$$$.$$$.#$$...$$$.#$.$$$.$$.$$$$.$$$$$..+ ", " .#$$.$.$$$$$.#$$$.$$$$.#$.$$$.$$.#$$....$$.$$$.$$$$$$..+ ", " .#$$$..$$$$$.#$$$.$$$$.#$.$$$.$$.#$$$$$.$$.$$.$$$$$$$..+ ", " .#$$$$.$$$$$.#$$$.$$$$.#$$...$$$.#$$...$$$.$$.$$$$$$$..+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .$...........$.........$.........$.....................+ ", " .###########$#########$#########$#########$##########$.+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .#$$$$$$.$$$.#$$$$.$$$.#$.....$$.#$$...$$$.$$.$$$.$$$..+ ", " .#$$$$$$$.$$.#$.$$.$$$.#$.$$$$$$.#$.$$$$$$.$$$.$.$$$$..+ ", " .#$$$$$$.$$$.#$.$$.$$$.#$....$$$.#$....$$$.$$$$.$$$$$..+ ", " .#$$.$.$..$$.#$.....$$.#$$$$$.$$.#$.$$$.$$.$$$.$.$$$$..+ ", " .#$$$.$$$$$$.#$$$$.$$$.#$.$$$.$$.#$.$$$.$$.$$.$$$.$$$..+ ", " .#$$.$.$$$$$.#$$$$.$$$.#$$...$$$.#$$...$$$.$$$$$$$$$$..+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .$...........$.........$.........$.....................+ ", " .###########$#########$#########$#########$##########$.+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .#$$$$$$$$$$.#$$$$.$$$.#$$...$$$.#$....$$$.$$$$$$$$$$..+ ", " .#$$....$$$$.#$$$..$$$.#$.$$$.$$.#$$$$$.$$.$$$$$$$$$$..+ ", " .#$$.$$$$$$$.#$$$$.$$$.#$$$$$.$$.#$$...$$$.$$.....$$$..+ ", " .#$$...$$$$$.#$$$$.$$$.#$$...$$$.#$$$$$.$$.$$$$$$$$$$..+ ", " .#$$.$$$$$$$.#$$$$.$$$.#$.$$$$$$.#$.$$$.$$.$$$$$$$$$$..+ ", " .#$$....$$$$.#$$$...$$.#$.....$$.#$$...$$$.$$$$$$$$$$..+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .$...........$.........$.........$.....................+ ", " .###########$#########$#########$#########$##########$.+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .#$$$.$$$.$$.#$$...$$$.#$$$$$$$$.#$$$$$$$$.$$$$.$$$$$..+ ", " .#$$...$.$$$.#$.$$$.$$.#$$$$$$$$.#$$....$$.$$$$.$$$$$..+ ", " .#$$$.$.$$$$.#$.$$$.$$.#$$$$$$$$.#$$$$$$$$.$$.....$$$..+ ", " .#$$$$.$$$$$.#$.$$$.$$.#$$$$$$$$.#$$....$$.$$$$.$$$$$..+ ", " .#$$$.$$$$$$.#$.$$$.$$.#$$$..$$$.#$$$$$$$$.$$$$.$$$$$..+ ", " .#$$.$$...$$.#$$...$$$.#$$$..$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", " .$...........$.........$.........$.....................+ ", " .......................................................+ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", " ", " ", " ", " "}; dockapps-43ddcdf/mask.xbm000066400000000000000000000061441256634747300155640ustar00rootroot00000000000000#define mask_width 64 #define mask_height 64 static unsigned char mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; dockapps-43ddcdf/readln.c000066400000000000000000000034151256634747300155300ustar00rootroot00000000000000/* readln.c - Edward H. Flora - ehflora@ksu.edu */ /* Last Modified: 2/24/98 */ /* * This function reads a string from a file pointed to by fp until a * new line (EOLN) or an end of file is encountered. It returns a pointer * to the string. The new line character is included in the string returned * by the function. */ /* EXTERNALS: ****************** * Functions Called: * Standard Libraries. * * Header Files Included: * Standard Includes only. */ /* PORTABILITY: ****************** * Coded in ANSI C, using ANSI prototypes. */ /****** Include Files *************************************************/ #include #include #include #define EOLN '\n' /* Defines the new line character */ #define SIZE1 10 /* Defines the increment to increase the */ /* string by until a newline of EOF is found */ /****** Function to Read a Line from fp *******************************/ char *readln(FILE *fp){ char *tmp, *t1, *t2; int count = 0, s1 = SIZE1; if((tmp = malloc(SIZE1*sizeof(char))) == NULL)return NULL; /* If cannot allocate memory */ if((t1 = fgets(tmp, SIZE1, fp)) == NULL){ free(tmp); return NULL; } /* If there is no string to be read */ while(strchr(t1,EOLN) == NULL){ /* Loop while EOLN is not in the string */ count += strlen(t1); if((s1 - count) > 1)break; s1 +=SIZE1; if((t2 = realloc(tmp, s1*sizeof(char))) == NULL){ free(tmp); return NULL; } /* If cannot allocate more memory */ else tmp = t2; if((t1 = fgets((tmp+count),((s1 - count)),fp)) == NULL)break; } /* End of While Loop */ if((t2 = realloc(tmp,strlen(tmp)+1)) == NULL)free(tmp); return (t2); } /****** End of Function readln ****************************************/ dockapps-43ddcdf/wmcalc.1000066400000000000000000000114571256634747300154540ustar00rootroot00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH WMCALC 1 "September 20, 2001" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME wmcalc \- dockable calculator application .SH SYNOPSIS .B wmcalc [\-g \fIgeometry\fP] [\-d \fIdisplay\fP] [\-v] [\-f \fIconfigfile\fP] [\-h] .SH DESCRIPTION This manual page documents briefly the .B wmcalc command. This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. .PP .\" TeX users may be more comfortable with the \fB\fP and .\" \fI\fP escape sequences to invode bold face and italics, .\" respectively. \fBwmcalc\fP is a program designed to act as a simple calculator offering basic operations like addition, subtraction, multiplication, division, square and squareroot. It is different from other calculator programs, however in that it is designed to take up very little desktop space. As such, it can be left running on the desktop at all times. It is intended to placed in the WindowMaker dock, or in Wharf under Afterstep, though it should run as well under any window manager. \fB*IMPORTANT*\fP: this calculator, due to its simple target, does not respect the proper mathematical operations order, and they are executed in the order they are inserted. Buttons are defined as: .nf ____________________ | x00 | x = 1 for Left Mouse Button | 0 1 2 3 4 5 6 7 8 9| x = 2 for Middle Mouse Button |--------------------| x = 3 for Right Mouse Button |x01 x02 x03 x04 x05 | |x06 x07 x08 x09 x10 | Note: the numbers 0..9 are the |x11 x12 x13 x14 x15 | indicators for memory cells |x16 x17 x18 x19 x20 | 0..9 respectively -------------------- .fi .TP Button Functions: .TP .B 100 Reinitialize the calculator. (100 = Left Mouse Button on Display) .TP .B 200 Clear all the memory registers (0..10) .TP .B 300 Clear the current number being entered only .TP .B x11 Start a program defined by CalcStart variable in config file .TP .B 1yy Perform function shown on button .TP .B 2yy Recall number from memory location [0-9] to display for calculation if yy = 2,3,4, 7,8,9, 12, 13, 14, 17 otherwise, can run a user-defined function (not implemented) .TP .B 3yy Store Displayed number in memory location [0-9] if yy = 2,3,4, 7,8,9, 12,13,14, 17 otherwise, can run a user-defined function (not implemented) .TP .B 1xx Hopefully the other functions are obvious from their button graphics. .SH OPTIONS .TP .B \-g Window Geometry - ie: 64x64+10+10 .TP .B \-d Display - ie: 127.0.0.1:0.0 .TP .B \-f Full path to configuration file. .TP .B \-v Verbose Mode. .TP .B \-h Help. .SH FILES .TP .I /etc/wmbutton.conf system wide wmbutton configuration file which will be used for all users who start wmcalc the first time. .TP .I ~/.wmcalc The configuration file (.wmcalc) is written by wmcalc whenever the user requests to store a number to memory. This file is automatically created the first time a user launches wmcalc with /etc/wmcalc.conf as template. As a part of this process, a file is written to /tmp. If /tmp is not accessible, it tries in the user's home directory, as defined by the environment variable HOME. This file is erased as soon as it is written over the main configuration file. .SH CONFIGURATION .TP The configuration file is case sensitive. A # starts a comment, and lines consisting entirely of whitespace are ignored. The syntax is simply: .TP .B Where and need to be separated by a Tab \\t and \fBnot\fP spaces. .TP \fBmem0 - mem9\fP Calculator Memory Locations. These must all exist, though they may be in any order. .TP \fBCalcStart\fP The CalcStart variable is intended to allow the user to start a larger calculator for more complicated needs. Everything after the tab '\\t' character is sent unmodified in a system() call, so anything you can type at the command prompt may be put here. .TP \fBImagChar\fP The ImagChar variable allows the user to choose between 'i' and 'j' to represent the sqrt(\-1). .SH AUTHOR wmcalc was written by Edward H. Flora , and is licensed under the terms of the GNU General Public License. .TP This manual page was written by Gordon Fraser , for the Debian GNU/Linux system (but may be used by others). dockapps-43ddcdf/wmcalc.c000066400000000000000000000703421256634747300155340ustar00rootroot00000000000000/**************************************************************** * File: wmcalc.c * Version: 0.3 * Date: January 17, 2001 * Author: Edward H. Flora * * This file is a part of the wmcalc application. As such, this * file is licensed under the GNU General Public License, version 2. * A copy of this license may be found in the file COPYING that should * have been distributed with this file. If not, please refer to * http://www.gnu.org/copyleft/gpl.html for details. * **************************************************************** Description: This file contains the main program code for the wmcalc application. Wmcalc is a dockapp designed for the WindowMaker or Afterstep window managers (although it should run well in most others.) wmcalc is a four-function (and more) calculator that has a small enough footprint that you may leave it open on your desktop at all times, for convenient use. Change History: Date Modification 01/17/01 Updated to use XLookupString 12/10/00 Revised includes, extracting X libs to wmcalc_x.h 11/09/00 Added "locked" memory capabilities 11/08/00 Added Code to Support Keyboard / focus 10/29/00 Implemented memory use, configuration files, and a quickstart button for a larger calculator. Also abstracted some of the macros, global vars, function prototypes, etc out to independent header files, to eliminate some dependency issues between source files. 02/10/00 Added keyboard event code, without success 12/21/99 Original product release, version 0.1 11/26/99 Original file creation ****************************************************************/ #include "wmcalc_x.h" #include #include #include #include #include #include #include "wmcalc_c.h" #include "wmcalc_err.h" #include "wmcalc_t.h" #include "wmcalc_g.h" #include "wmcalc_f.h" #include "backdrop.xpm" /* background graphic */ #include "calcbuttons.xpm" /* graphic of buttons */ #include "charmap.xpm" /* pixmap of characters */ #include "mask.xbm" /* Global Variables */ /* Ok, so I didn't get them all extracted. Should look into this further */ int N = 1; /* Button number pressed to goto app # */ int border = 0; int Verbose = 0; /* Debug flag */ int mmouse = 1; /* flag to enable middle mouse (hold over from wmbutton */ int button_pressed = -1; /* button to be drawn pressed */ char PlusMinusFlag = '+'; /* flag for sign of number in display */ char OpFlag = ' '; /* Operation requested */ int ExpFlag = 0; /* Flag if in scientific notation */ int DecFlag = 0; /* Flag if a decimal is in display */ int ImgFlag = 0; /* Flag if a number is imaginary */ int StrCnt = 0; double RegisterA = 0.0; /* Main working register, displayed */ double RegisterB = 0.0; /* Second register to add to, etc */ char DispString[DISPSIZE+1]; /* Pointer to string of display */ ButtonArea button_region[NUM_BUTTONS]; /* Array of buttons */ char *app_name = "wmcalc"; /* Name of app, for window management */ /**************************************************************** * Function: main **************************************************************** Description: This is the main Program control function for wmcalc. It contains all the X11 windows function calls, as well as other general operations. Change History: Date Modification 01/17/01 Updated to use XLookupString to get KeySym 11/09/00 Added Events for focus and keyboard work. 11/01/00 File Header Added 21/09/01 Added global configfile by Gordon Fraser ****************************************************************/ int main( int argc, char **argv ) { XEvent report; XGCValues xgcValues; XTextProperty app_name_atom; int err_code = OKAY; int dummy = 0; int i; char Geometry_str[64] = "64x64+0+0"; char Display_str[64] = ""; int KeywithMask = NO_BUTTON; KeySym ksym; XComposeStatus compose; char buffer[20]; int bufsize = 20; strcpy(configfile, getenv("HOME")); /* Added to wmbutton by Casey Harkin, 3/6/99 */ strcat(configfile, CONFFILENAME); /* Fixed Bug - didn't look in home directory */ /* but startup directory */ strcat(tempfile, CONFTEMPFILE); /* Setup name for temp file */ /* Clear the Calculator Display */ for(i=0; i= argc ) show_usage(); sscanf(argv[i], "%s", Geometry_str); if ( Verbose ) printf("Geometry is: %s\n", Geometry_str); break; case 'd': /* Set display */ if ( ++i >= argc ) show_usage(); sscanf(argv[i], "%s", Display_str); if ( Verbose ) printf("Display is: %s\n", Display_str); break; case 'h': /* Show Help Message */ show_usage(); break; case 'f': /* use config file */ if ( ++i >= argc ) show_usage(); sscanf(argv[i], "%s", configfile); if ( Verbose ) printf("Using Config File: %s\n", configfile); break; default: /* other, unknown, parameters */ show_usage(); break; } } } /* End of loop to process command line options */ /* Open display on requested X server */ if ( (display = XOpenDisplay(Display_str)) == NULL ) { error_handler(ERR_X_DISPLAY, Display_str); } screen = DefaultScreen(display); rootwin = RootWindow(display,screen); depth = DefaultDepth(display, screen); bg_pixel = WhitePixel(display, screen ); fg_pixel = BlackPixel(display, screen ); xsizehints.flags = USSize | USPosition; xsizehints.width = APP_WIDTH; xsizehints.height = APP_HEIGHT; /* Parse Geometry string and fill in sizehints fields */ XWMGeometry(display, screen, Geometry_str, NULL, border, &xsizehints, &xsizehints.x, &xsizehints.y, &xsizehints.width, &xsizehints.height, &dummy); if ( (win = XCreateSimpleWindow(display, rootwin, xsizehints.x, xsizehints.y, xsizehints.width, xsizehints.height, border, fg_pixel, bg_pixel) ) == 0 ) { error_handler(ERR_X_CREATE_WINDOW, NULL); } if ( (iconwin = XCreateSimpleWindow(display, win, xsizehints.x, xsizehints.y, xsizehints.width, xsizehints.height, border, fg_pixel, bg_pixel) ) == 0 ) { error_handler(ERR_X_CREATE_WINDOW, NULL); } /* Set up shaped windows */ /*Gives the appicon a border so you can grab and move it. */ if ( ( pixmask = XCreateBitmapFromData(display, win, (char *)mask_bits, mask_width, mask_height) ) == 0 ) { error_handler(ERR_X_CREATE_BITMAP, NULL); } XShapeCombineMask(display, win, ShapeBounding, 0, 0, pixmask, ShapeSet ); XShapeCombineMask(display, iconwin, ShapeBounding, 0, 0, pixmask, ShapeSet); /* Convert in pixmaps from .xpm includes. */ getPixmaps(); /* Interclient Communication stuff */ /* Appicons don't work with out this stuff */ xwmhints = XAllocWMHints(); xwmhints->flags = WindowGroupHint | IconWindowHint | StateHint; xwmhints->icon_window = iconwin; xwmhints->window_group = win; xwmhints->initial_state = WithdrawnState; XSetWMHints( display, win, xwmhints ); xclasshint.res_name = app_name; xclasshint.res_class = app_name; XSetClassHint( display, win, &xclasshint ); XSetWMNormalHints( display, win, &xsizehints ); /* Tell window manager what the title bar name is. We never see */ /* this anyways in the WithdrawnState */ if ( XStringListToTextProperty(&app_name, 1, &app_name_atom) == 0 ) { error_handler(ERR_SETUP_WINDOW_NAME, app_name); } XSetWMName( display, win, &app_name_atom ); /* Create Graphic Context */ if (( gc = XCreateGC(display, win,(GCForeground | GCBackground), &xgcValues)) == NULL ) { error_handler(ERR_CREATE_GC, NULL); } /* XEvent Masks. We want both windows to process X events */ XSelectInput(display, win, ExposureMask | ButtonPressMask | ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/ PointerMotionMask | FocusChangeMask | LeaveWindowMask | KeyPressMask | /* Try this to get keyboard working */ StructureNotifyMask | EnterWindowMask ); XSelectInput(display, iconwin, ExposureMask | ButtonPressMask | ButtonReleaseMask | /* added ButtonReleaseMask *charkins*/ PointerMotionMask | FocusChangeMask | LeaveWindowMask | KeyPressMask | /* Try this to get keyboard working */ StructureNotifyMask | EnterWindowMask ); /* Store the 'state' of the application for restarting */ XSetCommand( display, win, argv, argc ); /* Window won't ever show up until it is mapped.. then drawn after a */ /* ConfigureNotify */ XMapWindow( display, win ); /* Read Configuration File */ err_code = read_config(); if (err_code) { error_handler(err_code, configfile); } /* X Event Loop */ while (1) { XNextEvent(display, &report ); switch (report.type) { case Expose: if (report.xexpose.count != 0) { break; } if ( Verbose ) printf("Event: Expose\n"); redraw(); break; case ConfigureNotify: if ( Verbose ) printf("Event: ConfigureNotify\n"); /* redraw(); */ break; case KeyPress: if (Verbose) printf("Event: Key state: 0x%x Key: 0x%x\n", report.xkey.state, report.xkey.keycode); /* ksym = XLookupKeysym(&(report.xkey), report.xkey.state); */ /* KeywithMask - this allows Left, middle, and right button functions to be implemented via keyboard */ XLookupString(&(report.xkey), buffer, bufsize, &ksym, &compose); if (Verbose) printf("Keysym is: 0x%x\n", (int) ksym); KeywithMask = whichKey(ksym); ExecFunc( KeywithMask ); redraw(); break; case ButtonPress: /* draw button pressed, don't launch *charkins*/ switch (report.xbutton.button) { case Button1: N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) ) { button_pressed = N + LMASK; /* redraw(); */ } if ( Verbose ) printf("Button 1:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+LMASK); break; case Button2: if (mmouse) { N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) ) { button_pressed = N + MMASK; /* redraw(); */ } if ( Verbose ) printf("Button 2:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+MMASK); } break; case Button3: N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) ) { button_pressed = N + RMASK; /* redraw(); */ } if ( Verbose ) printf("Button 3:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+RMASK); break; } break; case ButtonRelease: /* If still over button, it was a real button press */ switch (report.xbutton.button) { case Button1: N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) && (N == button_pressed - LMASK)) ExecFunc(N + LMASK); button_pressed=-1; redraw(); if ( Verbose ) printf("Button 1:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+LMASK); break; case Button2: if (mmouse) { N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) && (N == button_pressed - MMASK)) ExecFunc( N + MMASK); button_pressed=-1; redraw(); if ( Verbose ) printf("Button 2:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+MMASK); } break; case Button3: N = whichButton(report.xbutton.x, report.xbutton.y ); if ( (N >= 0) && (N <= NUM_BUTTONS) && (N == button_pressed - RMASK)) ExecFunc( N + RMASK); button_pressed=-1; redraw(); if ( Verbose ) printf("Button 3:x=%d y=%d N=%d\n", report.xbutton.x, report.xbutton.y, N+RMASK); break; } break; case DestroyNotify: if ( Verbose ) printf("Requested Program Quit.\n"); XFreeGC(display, gc); XDestroyWindow(display,win); XDestroyWindow(display,iconwin); XCloseDisplay(display); exit(OKAY); break; case EnterNotify: case LeaveNotify: XSetInputFocus(display, PointerRoot, RevertToParent, CurrentTime); if (Verbose) printf("Focus Change\n"); break; } } return (OKAY); } /***** End of main program ***********************************/ /**************************************************************** * Function: redraw **************************************************************** Description: This function maintains the appearance of the application by copying the "visible" pixmap to the two windows (the withdrawn main window, and the icon window which is the main windows's icon image). Change History: Date Modification 11/1/00 Function Header updated ****************************************************************/ void redraw() { XCopyArea(display, template.pixmap, visible.pixmap, gc, 0, 0, template.attributes.width, template.attributes.height, 0, 0 ); defineButtonRegions(); /* Copy button to icon */ XCopyArea(display, buttons.pixmap, visible.pixmap, gc, 1, 1, 53, 40, 6, 20); flush_expose( win ); XCopyArea(display, visible.pixmap, win, gc, 0, 0, visible.attributes.width, visible.attributes.height, 0, 0 ); flush_expose( iconwin ); XCopyArea(display, visible.pixmap, iconwin, gc, 0, 0, visible.attributes.width, visible.attributes.height, 0, 0 ); /* if ( Verbose ) printf("In Redraw()\n"); */ displaystr(); } /***** End of function redraw() ********************************/ /**************************************************************** * Function: whichButton **************************************************************** Description: Return the button at the x,y coordinates. The button need not be visible ( drawn ). Return -1 if no button match. Change History: Date Modification 11/1/00 Function Header Updated ****************************************************************/ int whichButton( int x, int y ) { int index; for ( index=0; index < NUM_BUTTONS; index++ ) { if ( (x >= button_region[index].x) && (x <= button_region[index].i) && (y >= button_region[index].y) && (y <= button_region[index].j) ) { return(index); } } return(NO_BUTTON); } /***** End of function whichButton() **************************/ /**************************************************************** * Function: whichKey **************************************************************** Description: This function decodes the keycode passed in and converts this to a function number to execute. This is not simply the Button number, but also contains the LMASK, MMASK, or RMASK to pass into ExecFunc to handle expanded functions. Change History: Date Modification 01/17/01 Updated to take a KeySym, rather than a KeyCode 11/09/00 Original Function creation ****************************************************************/ int whichKey (KeySym keysym) { extern int Verbose; int func = NO_BUTTON; if (Verbose) printf("KeySym 0x%x received, decoding...\n", (int) keysym); switch(keysym) { case XK_Escape: case XK_space: case XK_KP_Space: func = LMASK + 0; break; case XK_Delete: func = MMASK + 0; break; case XK_BackSpace: func = RMASK + 0; break; case XK_Return: case XK_KP_Equal: case XK_KP_Enter: case XK_equal: func = LMASK + 19; break; case XK_KP_0: case XK_0: func = LMASK + 17; break; case XK_KP_1: case XK_1: func = LMASK + 12; break; case XK_KP_2: case XK_2: func = LMASK + 13; break; case XK_KP_3: case XK_3: func = LMASK + 14; break; case XK_KP_4: case XK_4: func = LMASK + 7; break; case XK_KP_5: case XK_5: func = LMASK + 8; break; case XK_KP_6: case XK_6: func = LMASK + 9; break; case XK_KP_7: case XK_7: func = LMASK + 2; break; case XK_KP_8: case XK_8: func = LMASK + 3; break; case XK_KP_9: case XK_9: func = LMASK + 4; break; case XK_KP_Decimal: case XK_period: func = LMASK + 18; break; case XK_KP_Divide: case XK_slash: func = LMASK + 5; break; case XK_KP_Subtract: case XK_minus: func = LMASK + 15; break; case XK_KP_Multiply: case XK_asterisk: func = LMASK + 10; break; case XK_KP_Add: case XK_plus: func = LMASK + 20; break; case XK_R: case XK_r: func = LMASK + 1; break; case XK_asciicircum: func = LMASK + 6; break; case XK_C: case XK_c: func = LMASK + 11; break; case XK_N: case XK_n: func = LMASK + 16; break; case XK_F1: func = MMASK + 12; break; case XK_F2: func = MMASK + 13; break; case XK_F3: func = MMASK + 14; break; case XK_F4: func = MMASK + 7; break; case XK_F5: func = MMASK + 8; break; case XK_F6: func = MMASK + 9; break; case XK_F7: func = MMASK + 2; break; case XK_F8: func = MMASK + 3; break; case XK_F9: func = MMASK + 4; break; case XK_F10: func = MMASK + 17; break; default: if (Verbose) printf("Unknown Keysym, ignoring.\n"); func = NO_BUTTON; break; } return(func); } /***** End of function whichKey() ****************************/ /**************************************************************** * Function: getPixmaps **************************************************************** Description: Load XPM data into X Pixmaps. * Pixmap 'template' contains the untouched window backdrop image. * Pixmap 'visible' is the template pixmap with buttons drawn on it. -- what is seen by the user. * Pixmap 'buttons' holds the images for individual buttons that are later copied onto Pixmap visible. * Pixmap 'charmap' holds the character map for the characters in the display. Change History: Date Modification 11/1/00 Function Header Updated ****************************************************************/ void getPixmaps() { template.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); visible.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); buttons.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); charmap.attributes.valuemask |= (XpmReturnPixels | XpmReturnExtensions); /* Template Pixmap. Never Drawn To. */ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm, &template.pixmap, &template.mask, &template.attributes) != XpmSuccess ) { error_handler(ERR_CREATE_PIXMAP, "template"); } /* Visible Pixmap. Copied from template Pixmap and then drawn to. */ if ( XpmCreatePixmapFromData( display, rootwin, backdrop_xpm, &visible.pixmap, &visible.mask, &visible.attributes) != XpmSuccess ) { error_handler(ERR_CREATE_PIXMAP, "visible"); } /* Button Pixmap. */ if ( XpmCreatePixmapFromData( display, rootwin, calcbuttons_xpm, &buttons.pixmap, &buttons.mask, &buttons.attributes) != XpmSuccess ) { error_handler(ERR_CREATE_PIXMAP, "buttons"); } /* Character Map Pixmap. */ if ( XpmCreatePixmapFromData( display, rootwin, charmap_xpm, &charmap.pixmap, &charmap.mask, &charmap.attributes) != XpmSuccess ) { error_handler(ERR_CREATE_PIXMAP, "charmap"); } } /***** End of function getPixmaps() *****************************/ /**************************************************************** * Function: flush_expose **************************************************************** Description: This function is a hold-over from previous programs (wmcp). The use of this function is not well understood. Change History: Date Modification 11/1/00 Function header updated. ****************************************************************/ int flush_expose(Window w) { XEvent dummy; int i=0; while (XCheckTypedWindowEvent(display, w, Expose, &dummy)) i++; return(i); } /***** End of function flush_expose() *************************/ /**************************************************************** * Function: defineButtonRegion **************************************************************** Description: This function defines the start and end x and y coordinates for the various buttons used in wmcalc. There should be a better way to do this, as right now, changing the pixmap calcbuttons.xpm may require the modification of these magic numbers. Change History: Date Modification 11/1/00 Function header updated ****************************************************************/ void defineButtonRegions(void) { int ndx = 0; /* button index */ button_region[0].x = 1; /* Define display region button */ button_region[0].i = 62; button_region[0].y = 6; button_region[0].j = 17; for (ndx = 1; ndx <= 5; ndx++) { /* Define y coord's for top row */ button_region[ndx].y = 20; button_region[ndx].j = 29; } for (ndx = 6; ndx <= 10; ndx++) { /* Define y coord's for 2nd row */ button_region[ndx].y = 30; button_region[ndx].j = 39; } for (ndx = 11; ndx <= 15; ndx++) { /* Define y coord's for 3rd row */ button_region[ndx].y = 40; button_region[ndx].j = 49; } for (ndx = 16; ndx <= 20; ndx++) { /* Define y coord's for bottom row */ button_region[ndx].y = 50; button_region[ndx].j = 59; } for (ndx = 1; ndx <= 16; ndx+=5) { /* Define x coord's for Left column */ button_region[ndx].x = 5; button_region[ndx].i = 16; } for (ndx = 2; ndx <= 17; ndx+=5) { /* Define x coord's for 2nd Left column */ button_region[ndx].x = 17; button_region[ndx].i = 26; } for (ndx = 3; ndx <= 18; ndx+=5) { /* Define x coord's for middle column */ button_region[ndx].x = 27; button_region[ndx].i = 36; } for (ndx = 4; ndx <= 19; ndx+=5) { /* Define x coord's for 2nd right column */ button_region[ndx].x = 37; button_region[ndx].i = 46; } for (ndx = 5; ndx <= 20; ndx+=5) { /* Define x coord's for 2nd right column */ button_region[ndx].x = 47; button_region[ndx].i = 57; } } /***** End of function defineButtonRgions() *************************/ /**************************************************************** * Function: displaychar **************************************************************** Description: This function displays individual characters to the "display". This function should only be called from displaystr(). Change History: Date Modification 11/09/00 Added "Locked" character and capabilities 11/01/00 Function header updated 10/30/00 Updated to include the memory indicators as well. ****************************************************************/ void displaychar(char ch, int location) { ButtonArea dispchar; int locatx, locaty; dispchar = getboundaries(ch); /* Get the region of the charmap containing the character to display */ locaty = 6; locatx = 2 + location * 6; /* If the character is a memory display character, use the memory location display region. Valid Characters are: '_' - No data in Memory Location '=' - Value in Memory Location, Not Locked '#' - Constant in Memory Location, Locked */ if ((ch == '=') || (ch == '_') || ch == '#') { locaty = 15; } XCopyArea(display, charmap.pixmap, win, gc, dispchar.x, dispchar.y, dispchar.i-dispchar.x, dispchar.j-dispchar.y, locatx, locaty); XCopyArea(display, charmap.pixmap, iconwin, gc, dispchar.x, dispchar.y, dispchar.i-dispchar.x, dispchar.j-dispchar.y, locatx, locaty); } /***** End of Function displaychar() **************************/ /**************************************************************** * Function: displaystr **************************************************************** Description: Change History: Date Modification 11/09/00 Added Capabilities for "Locked" memories 11/01/00 Function header updated 10/30/00 Added memory location indicators ****************************************************************/ void displaystr(void) { extern char DispString[]; extern int MemLock[]; extern double MemArray[]; extern int Verbose; int i; if (Verbose) printf("Displaystr %s\n", DispString); /* Update the alphanumeric display */ for (i = 0; i < DISPSIZE; i++) displaychar(DispString[i], i); /* Update the memory location indicators */ for (i = 0; i < NUM_MEM_CELLS; i++) { if (MemArray[i] == 0.0) displaychar('_', i); /* Value NOT stored here */ else if (MemLock[i] == 0) displaychar('=', i); /* Value IS stored here */ else displaychar('#', i); /* Constant IS stored here */ } } /***** End of function displaystr() ***************************/ /**************************************************************** * Function: show_usage **************************************************************** Description: This function prints a brief usage message to stdout, and exits. Change History: Date Modification 11/01/00 Function header updated ****************************************************************/ void show_usage(void) { printf("\n"); printf(" %s: Ver %d Rel %d\n",app_name, VER, REL); printf("\n"); printf("usage: %s [-g geometry] [-d display] [-f ] [-v] [-h] \n", app_name); printf("\n"); printf("-g Window Geometry - ie: 64x64+10+10\n"); printf("-d Display - ie: 127.0.0.1:0.0\n"); printf("-f Name of Config file - ie: /home/user/.wmcalc\n"); printf("-v Verbose Mode. \n"); printf("-h Help. This message.\n"); printf("\n"); exit(OKAY); } /***** End of function show_usage() ***************************/ /**************************************************************** * Function: error_handler **************************************************************** Description: This function will handle all fatal error conditions that exist. Error condition codes are kept in wmcalc_err.h Change History: Date Modification 11/1/00 Function created ****************************************************************/ void error_handler (int err_code, char *err_string) { extern char tempfile[]; if (err_code == OKAY) { /* This case should never happen. If it does, somebody screwed up (probably me), but don't kill the program!! */ return; } else { fprintf(stderr, "Error Code %d: ", err_code); switch (err_code) { case ERR_FILE_NOT_FOUND: fprintf(stderr, "Could not open file %s\n",configfile); break; case ERR_TMP_FILE_FAILED: fprintf(stderr, "Could not open temporary file %s\n", tempfile); break; case ERR_X_CREATE_WINDOW: fprintf(stderr, "Could not create simple window\n"); break; case ERR_X_CREATE_BITMAP: fprintf(stderr, "Could not create bitmap from data\n"); break; case ERR_SETUP_WINDOW_NAME: fprintf(stderr, "Could not setup window name %s\n", err_string); break; case ERR_CREATE_GC: fprintf(stderr, "XCreateGC\n"); break; case ERR_X_DISPLAY: fprintf(stderr, "Could not open display on %s\n", err_string); break; case ERR_CREATE_PIXMAP: fprintf(stderr, "Can't Create %s Pixmap\n", err_string); break; /* case : */ /* break; */ default: fprintf(stderr, "Unknown Error\n"); break; } } exit(err_code); } /***** End of Function error_handler **************************/ dockapps-43ddcdf/wmcalc.conf000066400000000000000000000021331256634747300162300ustar00rootroot00000000000000# wmcalc Configuration File # Last Manual Update: 10/29/00 # General Notes: # * There must be a tab character '\t' between the variable name and # the value, not a series of spaces. # * wmcalc is case sensitive when reading these variables. Examine the # wmcalc_g.h file for currently defined variables. #Calculator Memory Locations #Note: These must all exist, though they may be in any order Mem0 0.000000 Mem1 0.000000 MEM2 2.718282 MEM3 3.141593 Mem4 0.000000 Mem5 0.000000 Mem6 0.000000 Mem7 0.000000 Mem8 0.000000 Mem9 0.000000 # The CalcStart variable is intended to allow the user to start a larger # calculator for more complicated needs. Everything after the tab '\t' # character is sent unmodified in a system() call, so anything you can type # at the command prompt may be put here. #CalcStart xterm -T "Basic Calculator" -e bc & #CalcStart xterm -T "gnuplot" -sb -sl 500 -e gnuplot & CalcStart xcalc & # The ImagChar variable allows the user to choose between 'i' and 'j' to # represent the sqrt(-1). (Electrical Engineers (such as myself) use 'j' # rather than 'i.') #ImagChar i ImagChar j dockapps-43ddcdf/wmcalc1.xpm000066400000000000000000000373521256634747300162030ustar00rootroot00000000000000/* XPM */ static char * wmcalc1_xpm[] = { "128 120 14 1", " c None", ". c #000000", "+ c #C7C7C7", "@ c #003F18", "# c #00FF00", "$ c #FFFFFF", "% c #D5D6D5", "& c #EDFF00", "* c #FF0015", "= c #0019FF", "- c #FA00FF", "; c #FFA500", "> c #9B6603", ", c #2AE0B5", " . ", " . ", " . ", " . ", " ........................................................ . .......................................................+ ", " .......................................................+ . .......................................................+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", " .......................................................+ . .......................................................+ ", " ..@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@....+ . .......................................................+ ", " .......................................................+ . ", " .+++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .......................................................+ ", " .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .......................................................+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%.%%%..+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", " .$%%%....%.$%.....%%.$%%...%%%.$%%%..%%%.$%%%%%%%.%%%..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", " .$%%%.%%%%.$%%%%%.%%.$%.%%%.%%.$%%.%%.%%.$%%%%%%.%%%%..+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", " .$%%%.%%%%.$%%%%.%%%.$%%...%%%.$%%.%%.%%.$%%%%%.%%%%%..+ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", " .$%.%.%%%%.$%%%.%%%%.$%.%%%.%%.$%%%...%%.$%%%%.%%%%%%..+ . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", " .$%%..%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.$%%%.%%%%%%%..+ . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", " .$%%%.%%%%.$%%%.%%%%.$%%...%%%.$%%%..%%%.$%%%.%%%%%%%..+ . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", " .%.........%.........%.........%.........%.............+ . .......................................................+ ", " .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . ", " .$%%%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", " .$%%%%%%.%.$%%%%.%%%.$%%....%%.$%%%..%%%.$%%%.%%%.%%%..+ . .......................................................+ ", " .$%%%%%.%%.$%.%%.%%%.$%%.%%%%%.$%%.%%%%%.$%%%%.%.%%%%..+ . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", " .$%%%%%..%.$%.%%.%%%.$%%...%%%.$%%...%%%.$%%%%%.%%%%%..+ . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", " .$%.%.%%%%.$%.....%%.$%%%%%.%%.$%%.%%.%%.$%%%%.%.%%%%..+ . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%%.%%%%%.$%%%%.%%%.$%%.%%.%%.$%%.%%.%%.$%%%.%%%.%%%..+ . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%.%.%%%%.$%%%%.%%%.$%%%..%%%.$%%%..%%%.$%%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", " .%.........%.........%.........%.........%.............+ . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", " .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .......................................................+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", " .$%%%%%%%%.$%%%%.%%%.$%%%..%%%.$%%...%%%.$%%%%%%%%%%%..+ . ", " .$%%....%%.$%%%..%%%.$%%.%%.%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .......................................................+ ", " .$%%.%%%%%.$%%%%.%%%.$%%%%%.%%.$%%%..%%%.$%%%.....%%%..+ . .......................................................+ ", " .$%%...%%%.$%%%%.%%%.$%%%..%%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", " .$%%.%%%%%.$%%%%.%%%.$%%.%%%%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", " .$%%....%%.$%%%...%%.$%%....%%.$%%...%%%.$%%%%%%%%%%%..+ . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", " .%.........%.........%.........%.........%.............+ . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", " .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", " .$%%.%%%%%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", " .$%...%%.%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%%%.%%%%%..+ . .......................................................+ ", " .$%%.%%.%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.$%%%%%.%%%%%..+ . ", " .$%%%%.%%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%.....%%%..+ . ", " .$%%%.%%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.$%%%%%.%%%%%..+ . .......................................................+ ", " .$%%.%%..%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.$%%%%%.%%%%%..+ . .......................................................+ ", " .$%%%%%%%%.$%%...%%%.$%%%..%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .@#@@@.##@@###@@@@#@@####@@##@.####@.##@@@##@@@##@@@@@.+ ", " .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .##@@@#@@#@@.@#@#@#@@#@@.@#@@@.@@@#@#@@#@#.@#@#@.#@@@@.+ ", " .%.........%.........%.........%.........%.............+ . .@#@@@.@@#@@.@#@#@#@@###.@#@@@.@@@#@#@@#@#.@#@#@.#@@@@.+ ", " .......................................................+ . .@#@@@@@#@@@##@@#@#@@@@@#@###@.@@#@@@##@@@###@#@.#@###.+ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .@#@@@@#@@@@.@#@####@@@@#@#@@#.@#@@@#@@#@@.@#@#@.#@@@@.+ ", " . .@#@@@#@@@@@.@#@@@#@@#@@#@#@@#.@#@@@#@@#@@.@#@#@.#@@@@.+ ", " . .###@@####@###@@@@#@@@##.@@##@.@#@@@.##@@@##@@@##@@@@@.+ ", " . .......................................................+ ", " . .......................................................+ ", "................................................................. ", " ", " ............................................................. .......................................................+ ", " .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. .......................................................+ ", " .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .......................................................+ ", " .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. .......................................................+ ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. ", " .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ", " .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .......................................................+ ", " .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .......................................................+ ", " .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .......................................................+ ", " .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .......................................................+ ", " .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. ", " ............................................................. ", " ............................................................. ", " .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. .......................................................+ ", " .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. .......................................................+ ", " .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .......................................................+ ", " .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .......................................................+ ", " .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. ", " .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. ", " .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ....................................................... ", " .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ..@@@@.####.&&&&.****.====.----.;;;;.>>>>.$$$$.,,,,.... ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ....................................................... ", " ............................................................. ", " ............................................................. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. "}; dockapps-43ddcdf/wmcalc2.xpm000066400000000000000000000372171256634747300162040ustar00rootroot00000000000000/* XPM */ static char * wmcalc2_xpm[] = { "128 120 8 1", " c None", ". c #000000", "+ c #C7C7C7", "@ c #003F18", "# c #00FF00", "$ c #FFFFFF", "% c #D5D6D5", "& c #000100", " . ", " . ", " . ", " . ", " ............................................................... .......................................................+ ", " .............................................................+. .......................................................+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", " .............................................................+. .......................................................+ ", " ..@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@..+. .......................................................+ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. ", " .............................................................+. .......................................................+ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. .......................................................+ ", " .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%.%%%..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", " .$%%%%....%%.$%.....%%.$%%...%%%.$%%...%%%.%%%%%%.%%%..+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", " .$%%%%.%%%%%.$%%%%%.%%.$%.%%%.%%.$%.%%%.%%.%%%%%.%%%%..+ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", " .$%%%%.%%%%%.$%%%%.%%%.$%%...%%%.$%.%%%.%%.%%%%.%%%%%..+ . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", " .$%%.%.%%%%%.$%%%.%%%%.$%.%%%.%%.$%%....%%.%%%.%%%%%%..+ . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", " .$%%%..%%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.%%.%%%%%%%..+ . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", " .$%%%%.%%%%%.$%%%.%%%%.$%%...%%%.$%%...%%%.%%.%%%%%%%..+ . .......................................................+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", " .%...........%.........%.........%.....................+ . ", " .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .......................................................+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", " .$%%%%%%.%%%.$%%%%.%%%.$%.....%%.$%%...%%%.%%.%%%.%%%..+ . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", " .$%%%%%%%.%%.$%.%%.%%%.$%.%%%%%%.$%.%%%%%%.%%%.%.%%%%..+ . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", " .$%%%%%%.%%%.$%.%%.%%%.$%....%%%.$%....%%%.%%%%.%%%%%..+ . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%%.%.%..%%.$%.....%%.$%%%%%.%%.$%.%%%.%%.%%%.%.%%%%..+ . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%%%.%%%%%%.$%%%%.%%%.$%.%%%.%%.$%.%%%.%%.%%.%%%.%%%..+ . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " .$%%.%.%%%%%.$%%%%.%%%.$%%...%%%.$%%...%%%.%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", " .%...........%.........%.........%.....................+ . .......................................................+ ", " .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .......................................................+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . ", " .$%%%%%%%%%%.$%%%%.%%%.$%%...%%%.$%....%%%.%%%%%%%%%%..+ . .......................................................+ ", " .$%%....%%%%.$%%%..%%%.$%.%%%.%%.$%%%%%.%%.%%%%%%%%%%..+ . .......................................................+ ", " .$%%.%%%%%%%.$%%%%.%%%.$%%%%%.%%.$%%...%%%.%%.....%%%..+ . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", " .$%%...%%%%%.$%%%%.%%%.$%%...%%%.$%%%%%.%%.%%%%%%%%%%..+ . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", " .$%%.%%%%%%%.$%%%%.%%%.$%.%%%%%%.$%.%%%.%%.%%%%%%%%%%..+ . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", " .$%%....%%%%.$%%%...%%.$%.....%%.$%%...%%%.%%%%%%%%%%..+ . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", " .%...........%.........%.........%.....................+ . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", " .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", " .$%%%.%%%.%%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.%%%%.%%%%%..+ . .......................................................+ ", " .$%%...%.%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.%%%%.%%%%%..+ . ", " .$%%%.%.%%%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.%%.....%%%..+ . ", " .$%%%%.%%%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.%%%%.%%%%%..+ . .......................................................+ ", " .$%%%.%%%%%%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.%%%%.%%%%%..+ . .......................................................+ ", " .$%%.%%...%%.$%%...%%%.$%%%..%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@@#@.@##@.###@.@@#@.####.@##@.####.@##@.@##@.@##@.@@@.+ ", " .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@##@.#@@#.@@@#.#@#@.#@@@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", " .%...........%.........%.........%.....................+ . .@@#@.@@@#.@@@#.#@#@.###@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", " .......................................................+ . .@@#@.@@#@.@##@.#@#@.@@@#@###@.@@#@.@##@.@###.#@@#.###.+ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .@@#@.@#@@.@@@#.####.@@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", " . .@@#@.#@@@.@@@#.@@#@.#@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", " . .@###.####.###@.@@#@.@##..@##@.@#@@.@##@.@##@.@##@.@@@.+ ", " . .......................................................+ ", " . .......................................................+ ", "................................................................. ", " ", " ............................................................. ", " .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. ............................................................. ", " .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. ............................................................. ", " .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. ............................................................. ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ............................................................. ", " .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", " .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ............................................................. ", " .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .....................................................@#@.@#@. ", " ............................................................. .@@#@@.@@@@@.@@##@.@###@.@###@.@###@.@###@.@###@.....##@.#@#. ", " ............................................................. .@##@@.@@@@@.@#@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.###.@#@.@##. ", " .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@#@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....@#@.@@#. ", " .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.####@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....###.@#@. ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#...........&& ", " .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@#@@.@@##@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@###@@###@& ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .@###@.@@##@.@###@.@###@.@###@.@###@.@###@.@###@.@#@@@@#@@@@. ", " .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .................................................@@##@@#@@@@. ", " .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. ..###...@@@...###...@@@...###...###...@@@...@@@..@@@@#@#@@@@. ", " ............................................................. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@###@@@###@. ", " ............................................................. ............................................................. ", " .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. ", " .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. ............................................................. ", " .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .....................................................@@@.@@@. ", " .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@.@@@.@@@. ", " .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@............. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .................................................@@@@@@@@@@@. ", " .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ............................................................. ", " .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@###@@###@ @####@#@@@@ @####@#@@#@ @@@@@@@@@@@ ", " ............................................................. @#@@@@#@@@@ @#@@@@#@@@@ @#@@@@##@#@ @@@@@@@@@@@ ", " ............................................................. @@##@@#@@@@ @###@@#@@@@ @###@@####@ @@@@@@@@@@@ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@@@#@#@@@@ @#@@@@#@@@@ @#@@@@#@##@ @@@@@@@@@@@ ", " .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @###@@@###@ @#@@@@####@ @####@#@@#@ @@@@@@@@@@@ ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. "}; dockapps-43ddcdf/wmcalc3.xpm000066400000000000000000000372171256634747300162050ustar00rootroot00000000000000/* XPM */ static char * wmcalc3_xpm[] = { "128 120 8 1", " c None", ". c #000000", "+ c #C7C7C7", "@ c #003F18", "# c #00FF00", "$ c #FFFFFF", "% c #D5D6D5", "& c #000100", " . ", " . ", " .............................................................+ . ", " .@@@@@.@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ . ", " .@@@@@.@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ . .......................................................+ ", " .@@@@@.#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ . .......................................................+ ", " .@@@@@.####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ . .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", " .@@@@@.#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ . .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", " .............................................................+ . .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", " .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.@###@.#####.+ . .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", " .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.#@@@#.@@@@#.+ . .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", " .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@@@#.@@@#@.+ . .......................................................+ ", " .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.@@#@@.+ . .......................................................+ ", " .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@#@@.@#@@@.+ . ", " .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.@#@@@.@#@@@.+ . .......................................................+ ", " .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.#####.@#@@@.+ . .......................................................+ ", " .............................................................+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", " ..###...@@@...@@@...###...###...@@@...@@@...###...@@@...###..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", " .............................................................+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", " $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", " $%%%%%%%%.$%%%....%.$%.....%%.$%%...%%%.$%%...%%%.$%%%%%.%%. . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", " $%......%.$%%%.%%%%.$%%%%%.%%.$%.%%%.%%.$%.%%%.%%.$%%%%%.%%. . .......................................................+ ", " $%%.%%.%%.$%%%.%%%%.$%%%%.%%%.$%%...%%%.$%.%%%.%%.$%%%%.%%%. . .......................................................+ ", " $%%.%%.%%.$%.%.%%%%.$%%%.%%%%.$%.%%%.%%.$%%....%%.$%%%.%%%%. . ", " $%%.%%.%%.$%%..%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.$%%.%%%%%. . .......................................................+ ", " $%%.%%.%%.$%%%.%%%%.$%%%.%%%%.$%%...%%%.$%%...%%%.$%%.%%%%%. . .......................................................+ ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", " %.........%.........%.........%.........%.........%......... . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", " $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " $%%%%%%%%.$%%%%..%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " $%%%%%%%%.$%%%%%%.%.$%.%%.%%%.$%.....%%.$%%...%%%.$%.%%%.%%. . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", " $%%%..%%%.$%%%%%.%%.$%.%%.%%%.$%.%%%%%%.$%.%%%%%%.$%%.%.%%%. . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", " $%%.%%.%%.$%%%%.%%%.$%.%%.%%%.$%....%%%.$%....%%%.$%%%.%%%%. . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", " $%%....%%.$.%.%...%.$%.....%%.$%%%%%.%%.$%.%%%.%%.$%%.%.%%%. . .......................................................+ ", " $%%.%%%%%.$%.%%%%%%.$%%%%.%%%.$%.%%%.%%.$%.%%%.%%.$%.%%%.%%. . .......................................................+ ", " $%%%..%%%.$.%.%%%%%.$%%%%.%%%.$%%...%%%.$%%...%%%.$%%%%%%%%. . ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", " %.........%.........%.........%.........%.........%......... . .......................................................+ ", " $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", " $%.%%%%%%.$%%%%%%%%.$%%%.%%%%.$%%...%%%.$%....%%%.$%%%%%%%%. . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", " $%.%%%%%%.$%%....%%.$%%..%%%%.$%.%%%.%%.$%%%%%.%%.$%%%%%%%%. . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", " $%.%.%.%%.$%%.%%%%%.$%%%.%%%%.$%%%%%.%%.$%%...%%%.$%.....%%. . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", " $%.%..%.%.$%%...%%%.$%%%.%%%%.$%%...%%%.$%%%%%.%%.$%%%%%%%%. . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", " $%.%.%%.%.$%%.%%%%%.$%%%.%%%%.$%.%%%%%%.$%.%%%.%%.$%%%%%%%%. . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", " $%.%.%%.%.$%%....%%.$%%...%%%.$%.....%%.$%%...%%%.$%%%%%%%%. . .......................................................+ ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", " %.........%.........%.........%.........%.........%......... . ", " $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", " $.%%%%.%%.$%%.%%%.%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%.%%%%. . .......................................................+ ", " $.%.%.%.%.$%...%.%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%.%%%%. . .@@#@.@##@.###@.@@#@.####.@##@.####.@##@.@##@.@##@.@@@.+ ", " $..%..%.%.$%%.%.%%%.$%.%%%.%%.$%%%%%%%%.$%.....%%.$%.....%%. . .@##@.#@@#.@@@#.#@#@.#@@@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", " $..%.%..%.$%%%.%%%%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.$%%%.%%%%. . .@@#@.@@@#.@@@#.#@#@.###@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", " $.%.%%%.%.$%%.%%%%%.$%.%%%.%%.$%%%..%%%.$%.....%%.$%%%.%%%%. . .@@#@.@@#@.@##@.#@#@.@@@#@###@.@@#@.@##@.@###.#@@#.###.+ ", " $.%%%%.%%.$%.%%...%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@#@.@#@@.@@@#.####.@@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", " $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@#@.#@@@.@@@#.@@#@.#@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", " %.........%.........%.........%.........%.........%......... . .@###.####.###@.@@#@.@##..@##@.@#@@.@##@.@##@.@##@.@@@.+ ", " . .......................................................+ ", " . .......................................................+ ", "................................................................. ", " ", " ............................................................. ", " .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. ............................................................. ", " .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. ............................................................. ", " .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. ............................................................. ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ............................................................. ", " .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", " .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ............................................................. ", " .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .....................................................@#@.@#@. ", " ............................................................. .@@#@@.@@@@@.@@##@.@###@.@###@.@###@.@###@.@###@.....##@.#@#. ", " ............................................................. .@##@@.@@@@@.@#@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.###.@#@.@##. ", " .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@#@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....@#@.@@#. ", " .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.####@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....###.@#@. ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#...........&& ", " .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@#@@.@@##@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@###@@###@& ", " .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .@###@.@@##@.@###@.@###@.@###@.@###@.@###@.@###@.@#@@@@#@@@@. ", " .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .................................................@@##@@#@@@@. ", " .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@@@@#@#@@@@. ", " ............................................................. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@###@@@###@. ", " ............................................................. ............................................................. ", " .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. ", " .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. ............................................................. ", " .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .....................................................@@@.@@@. ", " .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@.@@@.@@@. ", " .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@............. ", " ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .................................................@@@@@@@@@@@. ", " .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", " .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ............................................................. ", " .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@###@@###@ @####@#@@@@ @####@#@@#@ @@@@@@@@@@@ ", " ............................................................. @#@@@@#@@@@ @#@@@@#@@@@ @#@@@@##@#@ @@@@@@@@@@@ ", " ............................................................. @@##@@#@@@@ @###@@#@@@@ @###@@####@ @@@@@@@@@@@ ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@@@#@#@@@@ @#@@@@#@@@@ @#@@@@#@##@ @@@@@@@@@@@ ", " .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @###@@@###@ @#@@@@####@ @####@#@@#@ @@@@@@@@@@@ ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", " ............................................................. "}; dockapps-43ddcdf/wmcalc_c.h000066400000000000000000000017331256634747300160410ustar00rootroot00000000000000/* File: wmcalc_c.h * Author: Edward H. Flora * Version: 0.2 * * Description: * This file contains the constants settings for the wmcalc program, * except for the error constants, which are contained in the file wmcalc_err.h * * Change History: * Date Modification * 10/25/00 Original file creation, extracted from wmcalc.h */ #ifndef WMCALC_C_H #define WMCALC_C_H #define CONFIGFILEMAX 128 #define CALC_CMD_SIZE 128 #define CONFFILENAME "/.wmcalc" #define CONFTEMPFILE "/tmp/wmcalc.tmp" #define CONFIGGLOBAL CONF"/wmcalc.conf" #define VER 0 #define REL 6 #define LMASK 100 #define MMASK 200 #define RMASK 300 #define CALCDONE 20 /* Anything >= 10 should work */ #define DISPSIZE 10 /* Number of characters in display */ #define NUM_BUTTONS 21 #define NUM_MEM_CELLS 10 #define APP_WIDTH 64 #define APP_HEIGHT 64 #define NO_BUTTON -1 #endif dockapps-43ddcdf/wmcalc_err.h000066400000000000000000000012331256634747300164020ustar00rootroot00000000000000/* File: wmcalc_err.h * Author: Edward H. Flora * Version: 0.2 * * Description: * This file contains the error codes for the wmcalc program. * * Change History: * Date Modification * 10/25/00 Original file creation, extracted from wmcalc.h */ #ifndef WMCALC_ERR_H #define WMCALC_ERR_H #define OKAY 0 #define ERR_FILE_NOT_FOUND 1001 #define ERR_TMP_FILE_FAILED 1002 #define ERR_X_CREATE_WINDOW 1101 #define ERR_X_CREATE_BITMAP 1102 #define ERR_SETUP_WINDOW_NAME 1103 #define ERR_CREATE_GC 1104 #define ERR_X_DISPLAY 1105 #define ERR_CREATE_PIXMAP 1201 #endif dockapps-43ddcdf/wmcalc_f.h000066400000000000000000000043671256634747300160520ustar00rootroot00000000000000/* File: wmcalc_f.h * Author: Edward H. Flora * Version: 0.2 * * Description: * This file contains the function prototypes for functional * components of the wmcalc program. * * Change History: * Date Modification * 01/17/01 Updated whichKey() function to take a KeySym * 11/09/00 Removed function clrmem() as this was merged into clrallmem() * Also add function whichKey, in wmcalc.c to handle Keyboard * events * 10/25/00 Original file creation, extracted from wmcalc.h */ #ifndef WMCALC_F_H #define WMCALC_F_H #include #include "wmcalc_x.h" #include "wmcalc_t.h" void ExecFunc(int val); /* function to run app N as found in conf file */ void redraw(void); void getPixmaps(void); int whichButton(int x, int y); /* determine which button has been pressed */ int whichKey(KeySym keysym); /* determine which key has been pressed */ int flush_expose(Window w); void show_usage(void); /* show usage message to stderr */ char *readln(FILE *fp); /* read line from file, return pointer to it */ void defineButtonRegions(void); /* Define boundaries for each button */ void displaystr(void); void displaychar(char ch, int location); ButtonArea getboundaries(char ch); int read_config(void); int write_config(void); void error_handler(int err_code, char *err_string); /* Calculator Specific functions */ void clearcalc(void); void clearnum(void); void addnums(void); void subtnums(void); void multnums(void); void divnums(void); void chgsignnum(void); void sqrtnum(void); void sqrnum(void); void charkey(char ch); void equalfunc(void); void stormem(int mem_loc); void clrallmem(void); void startcalc(void); void recallmem(int mem_loc); /* Future functions yet to be implemented */ /*void scinotation(void); */ /*void clearmem(void); */ /*void userdef201(void); */ /*void userdef205(void); */ /*void userdef206(void); */ /*void userdef210(void); */ /*void userdef211(void); */ /*void userdef215(void); */ /*void userdef218(void); */ /*void userdef220(void); */ /*void userdef301(void); */ /*void userdef305(void); */ /*void userdef306(void); */ /*void userdef310(void); */ /*void userdef315(void); */ /*void userdef318(void); */ /*void userdef320(void); */ #endif dockapps-43ddcdf/wmcalc_g.h000066400000000000000000000027141256634747300160450ustar00rootroot00000000000000/* File: wmcalc_g.h * Author: Edward H. Flora * Version: 0.2 * * Description: * This file contains the global variables used by the wmcalc program. * * Change History: * Date Modification * 10/25/00 Original file creation, extracted from wmcalc.h * 11/05/00 Added MemLock global array for locking values into Memory * 11/05/00 Added Entries for "Locked" memory values in config CfgVarList */ #ifndef WMCALC_G_H #define WMCALC_G_H #include "wmcalc_x.h" #include "wmcalc_c.h" /* X11 Globals */ Display *display; int screen; Window rootwin, win, iconwin; GC gc; int depth; Pixel bg_pixel, fg_pixel; XSizeHints xsizehints; XWMHints *xwmhints; XClassHint xclasshint; char configfile[CONFIGFILEMAX]; char tempfile[CONFIGFILEMAX]; Pixmap pixmask; ButtonArea dispchar; XpmIcon template, visible, buttons, charmap; /* Configuration File Information */ char *CfgVarList[MAX_LABEL] = {"Mem0", "Mem1", "Mem2", "Mem3", "Mem4", "Mem5", "Mem6", "Mem7", "Mem8", "Mem9", "MEM0", "MEM1", "MEM2", "MEM3", "MEM4", "MEM5", "MEM6", "MEM7", "MEM8", "MEM9", "ImagChar", "CalcStart"}; char ImagChar = 'j'; char SysCalcCmd[CALC_CMD_SIZE] = "xcalc &"; double MemArray[NUM_MEM_CELLS]; int MemLock [NUM_MEM_CELLS]; #endif dockapps-43ddcdf/wmcalc_t.h000066400000000000000000000015601256634747300160600ustar00rootroot00000000000000/* File: wmcalc_t.h * Author: Edward H. Flora * Version: 0.2 * * Description: * This file contains the typedefs for the wmcalc program. * * Change History: * Date Modification * 10/25/00 Original file creation, extracted from wmcalc.h */ #ifndef WMCALC_T_H #define WMCALC_T_H typedef struct _XpmIcon { Pixmap pixmap; Pixmap mask; XpmAttributes attributes; } XpmIcon; typedef struct _button_region { int x,y; int i,j; } ButtonArea; typedef enum { MEM_LABEL_0 = 0, MEM_LABEL_1, MEM_LABEL_2, MEM_LABEL_3, MEM_LABEL_4, MEM_LABEL_5, MEM_LABEL_6, MEM_LABEL_7, MEM_LABEL_8, MEM_LABEL_9, MEM_LOCK_0, MEM_LOCK_1, MEM_LOCK_2, MEM_LOCK_3, MEM_LOCK_4, MEM_LOCK_5, MEM_LOCK_6, MEM_LOCK_7, MEM_LOCK_8, MEM_LOCK_9, IMAG_LABEL, CALC_LABEL, MAX_LABEL } cfg_var_label_type; #endif dockapps-43ddcdf/wmcalc_x.h000066400000000000000000000017331256634747300160660ustar00rootroot00000000000000/**************************************************************** * File: wmcalc_x.h * Version: 0.3 * Author: Edward H. Flora * * This file is a part of the wmcalc application. As such, this * file is licensed under the GNU General Public License, version 2. * A copy of this license may be found in the file COPYING that should * have been distributed with this file. If not, please refer to * http://www.gnu.org/copyleft/gpl.html for details. * **************************************************************** Description: This file includes the X libraries. Change History: Date Modification 12/10/00 Original File Creation, from Peter da Silva ****************************************************************/ #ifndef WMCALC_X_H #define WMCALC_X_H #include #include #include #include #include #endif dockapps-43ddcdf/wmcalcfunc.c000066400000000000000000000353121256634747300164060ustar00rootroot00000000000000/**************************************************************** * File: wmcalcfunc.c * Version: 0.21 * Author: Edward H. Flora * * This file is a part of the wmcalc application. As such, this * file is licensed under the GNU General Public License, version 2. * A copy of this license may be found in the file COPYING that should * have been distributed with this file. If not, please refer to * http://www.gnu.org/copyleft/gpl.html for details. * **************************************************************** Description: This file contains the code for the actual calculator functions, such as a add, subt, clear, etc. Change History: Date Modification 11/03/00 File Header added 27/12/06 Increased significant digits (Antony Gelberg, antony@wayforth.co.uk) ****************************************************************/ /***** Includes *************************************************/ #include #include #include #include #include "wmcalc_c.h" #include "wmcalc_err.h" #include "wmcalc_f.h" /**************************************************************** * Function: clearcalc **************************************************************** Description: This function will clear the calculator display, and internal flags. Change History: Date Modification 11/03/00 Function header added 11/04/00 Replaced magic numbers with DISPSIZE ****************************************************************/ void clearcalc(void) { extern int StrCnt; extern char PlusMinusFlag; extern int ExpFlag; extern int DecFlag; extern double RegisterA; extern double RegisterB; extern char DispString[]; extern char OpFlag; int i; RegisterA = 0.0; RegisterB = 0.0; ExpFlag = 0; DecFlag = 0; PlusMinusFlag = '+'; StrCnt = 0; for (i=0; i < DISPSIZE; i++) { DispString[i] = ' '; } OpFlag = ' '; } /***** End of function clearcalc() *****************************/ /**************************************************************** * Function: clearnum **************************************************************** Description: Clears the current number being entered. Change History: Date Modification 11/03/00 Updated function header 11/04/00 Replaced magic numbers with DISPSIZE ****************************************************************/ void clearnum(void) { extern int StrCnt; extern char PlusMinusFlag; extern int ExpFlag; extern int DecFlag; extern double RegisterA; extern char DispString[]; int i; RegisterA = 0.0; ExpFlag = 0; DecFlag = 0; PlusMinusFlag = '+'; StrCnt = 0; for (i=0; i < DISPSIZE; i++) { DispString[i] = ' '; } } /***** End of function clearnum() ******************************/ /**************************************************************** * Function: charkey **************************************************************** Description: Add characters to the number being entered. Change History: Date Modification 11/03/00 Updated function header 11/04/00 Replaced magic numbers with DISPSIZE ****************************************************************/ void charkey(char ch) { extern int Verbose; extern int StrCnt; extern int DecFlag; extern double RegisterA, RegisterB; extern char DispString[]; int i; if (Verbose) printf("In function charkey\n"); if (StrCnt < DISPSIZE) { if (ch == '.') { if (DecFlag == 0) { for (i = 1; i < DISPSIZE; i++) DispString[i-1] = DispString[i]; DecFlag = 1; StrCnt++; DispString[DISPSIZE - 1] = ch; } } else { for (i = 1; i < DISPSIZE; i++) DispString[i-1] = DispString[i]; DispString[9] = ch; StrCnt++; } } /* endif (StrCnt < DISPSIZE) */ else if (StrCnt == CALCDONE) { RegisterB = RegisterA; clearnum(); if (ch == '.') { for (i = 1; i < DISPSIZE; i++) DispString[i-1] = DispString[i]; DecFlag = 1; StrCnt++; DispString[DISPSIZE -1] = ch; } else { for (i = 1; i < DISPSIZE; i++) DispString[i-1] = DispString[i]; DispString[DISPSIZE - 1] = ch; StrCnt++; } } /* endif (StrCnt == CALCDONE) */ RegisterA = atof(DispString); } /***** End of Function charkey() *******************************/ /**************************************************************** * Function: chgsignnum **************************************************************** Description: Change the sign of the number currently being entered Change History: Date Modification 11/03/00 Updated Function header ****************************************************************/ void chgsignnum(void) { extern int Verbose; extern double RegisterA; extern char DispString[]; if (Verbose) printf("In function chgsignnum\n"); RegisterA = -RegisterA; sprintf(DispString, "%10.5g", RegisterA); } /***** End of function chgsignnum() *****************************/ /**************************************************************** * Function: sqrnum **************************************************************** Description: Square the number in RegisterA Change History: Date Modification 11/03/00 Updated Function header ****************************************************************/ void sqrnum(void) { extern int Verbose; extern int StrCnt; extern double RegisterA; extern char DispString[]; extern int ImgFlag; if (Verbose) printf("In function sqrnum\n"); RegisterA = atof(DispString); RegisterA = pow(RegisterA, 2.0); if (ImgFlag) { RegisterA = -RegisterA; ImgFlag = 0; } sprintf(DispString, "%10.5g", RegisterA); StrCnt = CALCDONE; } /***** End of Function sqrnum() *******************************/ /**************************************************************** * Function: sqrtnum **************************************************************** Description: Take the square root of the number in RegisterA Change History: Date Modification 11/03/00 Updated function header 11/04/00 Replaced magic numbers with DISPSIZE ****************************************************************/ void sqrtnum(void) { extern int Verbose; extern int StrCnt; extern double RegisterA; extern int ImgFlag; extern char ImagChar; extern char DispString[]; int i; if (Verbose) printf("In function sqrtnum\n"); RegisterA = atof(DispString); if (RegisterA >= 0) { RegisterA = pow(RegisterA, 0.5); sprintf(DispString, "%10.5g", RegisterA); } else { RegisterA = pow(-RegisterA, 0.5); ImgFlag = 1; sprintf(DispString, "%10.4g", RegisterA); for(i=1; i < DISPSIZE - 1; i++) DispString[i] = DispString[i+1]; DispString[DISPSIZE - 1] = ImagChar; } StrCnt = CALCDONE; } /***** End of function sqrtnum() ********************************/ /**************************************************************** * Function: addnums **************************************************************** Description: Add the number in Registers A to Register B. Change History: Date Modification 11/03/00 Updated Function header ****************************************************************/ void addnums(void) { extern int Verbose; extern int StrCnt; extern double RegisterA, RegisterB; extern char OpFlag; if(Verbose) printf("In function addnums: "); if(OpFlag != ' ') { equalfunc(); } else { if(Verbose) printf("%g + ?? = ??\n", RegisterB); RegisterB = RegisterA; } StrCnt = CALCDONE; OpFlag = '+'; } /***** End of function addnums() *********************************/ /**************************************************************** * Function: subtnums **************************************************************** Description: Subtract current number (in RegisterA) from accumulated total. Change History: Date Modification 11/03/00 Updated Function header ****************************************************************/ void subtnums(void) { extern int Verbose; extern int StrCnt; extern double RegisterA, RegisterB; extern char OpFlag; if(Verbose) printf("In function subtnums: "); if (OpFlag != ' ') { equalfunc(); } else { if(Verbose) printf("%g - ?? = ??\n", RegisterB); RegisterB = RegisterA; } StrCnt = CALCDONE; OpFlag = '-'; } /***** End of function subtnums() *****************************/ /**************************************************************** * Function: multnums **************************************************************** Description: Multiply number in RegisterA by the accumulated total. Change History: Date Modification 11/03/00 Updated function header ****************************************************************/ void multnums(void) { extern int Verbose; extern int StrCnt; extern char OpFlag; extern double RegisterA, RegisterB; if(Verbose) printf("In function multnums: "); if(OpFlag != ' ') { equalfunc(); } else { if(Verbose) printf("%g * ?? = ??\n", RegisterB); RegisterB = RegisterA; } StrCnt = CALCDONE; OpFlag = '*'; } /***** End of function multnums() *****************************/ /**************************************************************** * Function: divnums **************************************************************** Description: Divide the accumulated total by the current number in RegisterA Change History: Date Modification 11/04/00 Updated Function Header ****************************************************************/ void divnums(void) { extern int Verbose; extern int StrCnt; extern double RegisterA, RegisterB; extern char OpFlag; if(Verbose) printf("In function divnums: "); if(OpFlag != ' ') { equalfunc(); } else { if(Verbose) printf("%g / ?? = ??\n", RegisterB); RegisterB = RegisterA; } StrCnt = CALCDONE; OpFlag = '/'; } /* End of Function divnums() ********************************/ /**************************************************************** * Function: **************************************************************** Description: Calculate result of entered calculation. Change History: Date Modification 11/04/00 Updated Function Header ****************************************************************/ void equalfunc (void) { extern int Verbose; extern int StrCnt; extern char DispString[]; extern double RegisterA, RegisterB; extern char OpFlag; if (Verbose) printf("Equal Function: Operation >> %c <<\n", OpFlag); switch (OpFlag) { case '+': RegisterA = RegisterB + RegisterA; sprintf(DispString, "%10.10g", RegisterA); break; case '-': RegisterA = RegisterB - RegisterA; sprintf(DispString, "%10.10g", RegisterA); break; case '*': RegisterA = RegisterB * RegisterA; sprintf(DispString, "%10.10g", RegisterA); break; case '/': RegisterA = RegisterB / RegisterA; sprintf(DispString, "%10.10g", RegisterA); break; default: break; } OpFlag = ' '; StrCnt = CALCDONE; } /***** End of function equalfunc() ******************************/ /**************************************************************** * Function: clrallmem **************************************************************** Description: Clear all the values in memory Change History: Date Modification 11/04/00 Updated Function Header 11/04/00 Incorporated clrmem() function into this one, to optimize code. ****************************************************************/ void clrallmem(void) { extern int Verbose; extern double MemArray[]; extern int MemLock[]; int i; if (Verbose) printf("Clear All Memory Function\n"); for (i = 0; i < NUM_MEM_CELLS; i++) { if (MemLock[i] != 1) { MemArray[i] = 0.0; if (Verbose) printf(" %f ", MemArray[i]); } } if (Verbose) printf("\n"); write_config(); } /***** End of function clrallmem() ****************************/ /**************************************************************** * Function: stormem **************************************************************** Description: Store value to memory cell #N Change History: Date Modification 11/04/00 Updated function header 11/05/00 Added Locked Memory capabilities ****************************************************************/ void stormem(int mem_loc) { extern double MemArray[]; extern int MemLock[]; extern int Verbose; extern double RegisterA; int i; if (Verbose) printf("Store Value %f in Memory Cell %d\nMemory:", RegisterA, mem_loc); if (MemLock[mem_loc] != 1) { MemArray[mem_loc] = RegisterA; write_config(); } else { if (Verbose) printf("Memory location %d Locked at %f\n", mem_loc, MemArray[mem_loc]); } if (Verbose) { for (i = 0; i < NUM_MEM_CELLS; i++) printf(" %f ", MemArray[i]); printf("\n"); } } /***** End of function stormem() ******************************/ /**************************************************************** * Function: recallmem **************************************************************** Description: Store value to memory cell #N Change History: Date Modification 11/04/00 Updated function header ****************************************************************/ void recallmem(int mem_loc) { extern double MemArray[]; extern int Verbose; extern double RegisterA; extern char DispString[]; int i; if (Verbose) printf("Recall Value in Memory Cell %d\nMemory:", mem_loc); RegisterA = MemArray[mem_loc]; sprintf(DispString, "%10.5g", RegisterA); if (Verbose) { for (i = 0; i < NUM_MEM_CELLS; i++) printf(" %f ", MemArray[i]); printf("\n"); } } /***** End of function recallmem() ***************************/ /**************************************************************** * Function: startcalc **************************************************************** Description: Change the sign of the number currently being entered Change History: Date Modification 11/04/00 Updated function header ****************************************************************/ void startcalc(void) { extern int Verbose; extern char SysCalcCmd[]; if (Verbose) fprintf(stderr, "Starting external calculator %s\n", SysCalcCmd); if (system(SysCalcCmd) == -1) fprintf(stderr, "%s returned an error.\n", SysCalcCmd); } /***** End of function startcalc *****************************/ dockapps-43ddcdf/wmcalcscr.xpm000066400000000000000000000123131256634747300166200ustar00rootroot00000000000000/* XPM */ static char * wmcalcscr_xpm[] = { "64 64 61 1", " c None", ". c #F3F3F3", "+ c #000000", "@ c #E0E0E0", "# c #516161", "$ c #A2A2B2", "% c #A2A2A2", "& c #A292B2", "* c #92A2A2", "= c #A292A2", "- c #9292A2", "; c #929292", "> c #9282A2", ", c #829292", "' c #928292", ") c #828292", "! c #828282", "~ c #827192", "{ c #615161", "] c #92A2B2", "^ c #9292B2", "/ c #8292A2", "( c #8282A2", "_ c #718292", ": c #718282", "< c #C7C7C7", "[ c #414141", "} c #003F18", "| c #00FF00", "1 c #FFFFFF", "2 c #D5D6D5", "3 c #717182", "4 c #415151", "5 c #514151", "6 c #717171", "7 c #414151", "8 c #617182", "9 c #415141", "0 c #716182", "a c #617171", "b c #413041", "c c #304141", "d c #716171", "e c #616171", "f c #616182", "g c #303030", "h c #616161", "i c #303041", "j c #516171", "k c #304130", "l c #615171", "m c #203030", "n c #302030", "o c #515171", "p c #515161", "q c #827182", "r c #202030", "s c #717192", "t c #202020", "u c #515151", "v c #413051", "...............................................................+", ".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+", ".@$%$%&%&%&%&*=-&*=-=-=---=--;>;>;>;>,>,>,')',')')'))!)))!~!~!{+", ".@$$*$]$*$*$*&*&*^*-*-*-*-*-/---,-,-,>,>,(,>,(,),),)))))_)_):)#+", ".<[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".+}}|}}+}|||}+|||||+}}}|}+|||||+}}||}+|||||+}|||}+}|||}+}|||}+<+", ".+}||}}+|}}}|+}}}|}+}}||}+|}}}}+}|}}}+}}}}|+|}}}|+|}}}|+|}}}|+<+", ".+}}|}}+}}}}|+}}|}}+}|}|}+||||}+|}}}}+}}}|}+|}}}|+|}}}|+|}}}|+<+", ".+}}|}}+}}}|}+}}}|}+|}}|}+}}}}|+||||}+}}|}}+}|||}+}||||+|}}}|+<+", ".+}}|}}+}}|}}+}}}}|+|||||+}}}}|+|}}}|+}|}}}+|}}}|+}}}}|+|}}}|+<+", ".+}}|}}+}|}}}+|}}}|+}}}|}+|}}}|+|}}}|+}|}}}+|}}}|+}}}|}+|}}}|+<+", ".+}|||}+|||||+}|||}+}}}|}+}|||}+}|||}+}|}}}+}|||}+}||}}+}|||}+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".+|||||+}}}}}+|||||+|||||+}}}}}+|||||+}}}}}+|||||+|||||+}}}}}+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+", ".@*^+11111111121111111112111111111211111111121111111111112+<:34+", ".@=-+122222222+122222222+122222222+122222222+12222222+222++<335+", ".@*-+1222++++2+12+++++22+122+++222+1222++222+12222222+222++<334+", ".@=-+1222+2222+122222+22+12+222+22+122+22+22+1222222+2222++<365+", ".@--+1222+2222+12222+222+122+++222+122+22+22+122222+22222++<337+", ".@=-+12+2+2222+1222+2222+12+222+22+1222+++22+12222+222222++<365+", ".@*-+122++2222+1222+2222+12+222+22+122222+22+1222+2222222++<839+", ".@-;+1222+2222+1222+2222+122+++222+1222++222+1222+2222222++<067+", ".@--+122222222+122222222+122222222+122222222+122222222222++<83[+", ".@>;+2+++++++++2+++++++++2+++++++++2+++++++++2+++++++++++++<0ab+", ".@--+11111111121111111112111111111211111111121111111111112+;+122222+22+12+22+222+122+22222+122+22222+12222+2+2222++<0ab+", ".@,-+122222++2+12+22+222+122+++222+122+++222+122222+22222++,+12+2+2222+12+++++22+122222+22+122+22+22+12222+2+2222+++122+22222+12222+222+122+22+22+122+22+22+1222+222+222+++122222222+122222222+122222222+122222222+122222222222++,+2+++++++++2+++++++++2+++++++++2+++++++++2++++++++++++++11111111121111111112111111111211111111121111111111112+C" Cm%y&!АRVlTVy %YD9d ygYxH 4p@Gb"v !@YRCy "&+lnDBY%l C"B9䫑p*b$'|)(!j{*Dn hbIe陈)nIƪ+雞y陋z 矓U%h٦C虩eUКzR BC\ Q|~eʥ% &Ë {L’fU2VjuUvB \ӼQ|7O h ]&CW$tU\CyLqV5tUn,r 4t?DoN+k6, kZ}2}v|@<ɚM2(鞍,b{(퐶l)ஊKeƀJL)k~d~njwf y^0'L{۽ciͿvKBqna}-KLlA8KM4%FpӇ^MrJ7qV6-=k5ֱoejS Z60/NSb.}frإ7Am% JZ<0iU'"{HV@ى-(DDH:K9*v0T+8I06.4V"(G%NS֮6A!HB+mF/+>Z{T{+|I_$חEvh6i!)RfȻZpamԘit!Jqj{~H1>iYF1r"*L](>PRbtK )eޙ,Ĕ !2*-j]*,g7]lkf@0ajX7pKUq#۸ $Ā6al#@+Rl{HBeR3K!ELgZ SV *PT",T-PX QX)\:GTI`* Cu`SS*qP"iCԕv++ٱ⯀ `+ 64Zaa ;dockapps-43ddcdf/wmcalcscr2.xpm000066400000000000000000000123141256634747300167030ustar00rootroot00000000000000/* XPM */ static char * wmcalcscr2_xpm[] = { "64 64 61 1", " c None", ". c #F3F3F3", "+ c #000000", "@ c #E0E0E0", "# c #516161", "$ c #A2A2B2", "% c #A2A2A2", "& c #A292B2", "* c #92A2A2", "= c #A292A2", "- c #9292A2", "; c #929292", "> c #9282A2", ", c #829292", "' c #928292", ") c #828292", "! c #828282", "~ c #827192", "{ c #615161", "] c #92A2B2", "^ c #9292B2", "/ c #8292A2", "( c #8282A2", "_ c #718292", ": c #718282", "< c #C7C7C7", "[ c #00FF00", "} c #003F18", "| c #FFFFFF", "1 c #D5D6D5", "2 c #717182", "3 c #514151", "4 c #415151", "5 c #717171", "6 c #414151", "7 c #617182", "8 c #415141", "9 c #716182", "0 c #414141", "a c #617171", "b c #413041", "c c #304141", "d c #716171", "e c #616171", "f c #616182", "g c #303030", "h c #616161", "i c #303041", "j c #516171", "k c #304130", "l c #615171", "m c #203030", "n c #302030", "o c #515171", "p c #515161", "q c #827182", "r c #202030", "s c #717192", "t c #202020", "u c #515151", "v c #413051", "...............................................................+", ".@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#+", ".@$%$%&%&%&%&*=-&*=-=-=---=--;>;>;>;>,>,>,')',')')'))!)))!~!~!{+", ".@$$*$]$*$*$*&*&*^*-*-*-*-*-/---,-,-,>,>,(,>,(,),),)))))_)_):)#+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".+[[[[[+}}}}}+}}[}}+}}}[}+}}[}}+[[[[[+}[[[}+}[[[}+}}[[}+[[[[[+<+", ".+}}}[}+}}}}}+}[[}}+}}[[}+}[[}}+[}}}}+[}}}[+[}}}[+}[}}}+[}}}}+<+", ".+}}[}}+}}}}}+}}[}}+}[}[}+}}[}}+[[[[}+[}}}[+}}}}[+[}}}}+[[[[}+<+", ".+}}}[}+}}}}}+}}[}}+[}}[}+}}[}}+}}}}[+}[[[[+}}}[}+[[[[}+}}}}[+<+", ".+}}}}[+}}}}}+}}[}}+[[[[[+}}[}}+}}}}[+}}}}[+}}[}}+[}}}[+}}}}[+<+", ".+[}}}[+}}[[}+}}[}}+}}}[}+}}[}}+[}}}[+}}}[}+}[}}}+[}}}[+[}}}[+<+", ".+}[[[}+}}[[}+}[[[}+}}}[}+}[[[}+}[[[}+}[[}}+[[[[[+}[[[}+}[[[}+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".+[[[[[+}}}}}+[[[[[+[[[[[+}}}}}+}}}}}+[[[[[+}}}}}+}}}}}+[[[[[+<+", ".+[[[[[+}}}}}+[[[[[+[[[[[+}}}}}+}}}}}+[[[[[+}}}}}+}}}}}+[[[[[+<+", ".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<+", ".<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+", ".@=-+|||||||||1|||||||||1|||||||||1|||||||||1||||||||||||1+<223+", ".@*-+|11111111+|11111111+|11111111+|11111111+|1111111+111++<224+", ".@=-+|111++++1+|1+++++11+|11+++111+|11+++111+|1111111+111++<253+", ".@--+|111+1111+|11111+11+|1+111+11+|1+111+11+|111111+1111++<226+", ".@=-+|111+1111+|1111+111+|11+++111+|1+111+11+|11111+11111++<253+", ".@*-+|1+1+1111+|111+1111+|1+111+11+|11++++11+|1111+111111++<728+", ".@-;+|11++1111+|111+1111+|1+111+11+|11111+11+|111+1111111++<956+", ".@--+|111+1111+|111+1111+|11+++111+|11+++111+|111+1111111++<720+", ".@>;+|11111111+|11111111+|11111111+|11111111+|11111111111++<9ab+", ".@--+1+++++++++1+++++++++1+++++++++1+++++++++1+++++++++++++;+|11111+11+|1111+111+|1+++++11+|11+++111+|111+111+111++<9ab+", ".@,-+|111111+1+|1+11+111+|1+111111+|1+111111+|1111+1+1111++,+|11111+11+|1+11+111+|1++++111+|1++++111+|11111+11111+++|1+1+1++1+|1+++++11+|11111+11+|1+111+11+|1111+1+1111+++|1+1+1111+|1111+111+|11+++111+|11+++111+|11111111111++,+|11111111+|11111111+|11111111+|11111111+|11111111111+++1+++++++++1+++++++++1+++++++++1+++++++++1+++++++++++++k{T1vZ 9H$0ų2BC[up F}Ppp>f91\u"*Gbml{ O>Gf|pZp) OHռoIR[VbDkIVkrD!&㐗۪جسq%."Cy@;t@JWW@ǮS{_5vG1P +yf@ߪu3\kUkR/Xvd.UFGݰ|u%Q%X'Z9թYT.zژdժW=R`EʵՈymI Զ]Dq/"5TS@҇^2~= *cb6F&>C>@?}i25}wBG%dNЈGW$^,0+zq+37~>}M:6rD|1Òl<GdoG2^咴9cMiY@`pQTXխ*φ8jz88F"8 H҈iU+3e{ J f!r*qQjַOzbUck{)Ē4i* -U IoI886o+߂뷡Ҟ,L5+ROTd&BM.Yy/&;;NͤJq5yZȀìkg il58 ,v",]X .~1D}pSe"9?NvASNE~=BI*[~ĭ qiZZ e}$خun{ŻҖZ,>C-Y8cє}R>WVnuXk_FZWehb +Jxt"#em^qINUeY2rĕdX*vC7u"BFWi]僎FYVi$A'H  QI+-#] 5 OKG <~Ch9%J^[5Pr4}rn%DǍim&#, _Wl\mAG8&PUw0yjI32+ eI$oCzSc!țWřMVPf/1|cSƾ('y{/zKѩWxu'JCsÜ>($8ˬj@U|q% &6/Vʯu1oM2QzV*xd3gQѧuwvL UTaDd^?=rÊA=4FQP1 -.^!~^*ˉX#1ȳ;-/Cl@NKJ4A * * This file is a part of the wmcalc application. As such, this * file is licensed under the GNU General Public License, version 2. * A copy of this license may be found in the file COPYING that should * have been distributed with this file. If not, please refer to * http://www.gnu.org/copyleft/gpl.html for details. * **************************************************************** Description: This file contains system level functions, such as read/write of the config file, character map boundaries, etc. Change History: Date Modification 11/1/00 Updated Function headers, cleaned up comments some. ****************************************************************/ #include #include #include #include #include "wmcalc_err.h" #include "wmcalc_c.h" #include "wmcalc_f.h" /**************************************************************** * Function: ExecFunc **************************************************************** Description: This function determines which button was pressed, and performs the appropriate function. Change History: Date Modification 11/01/00 Function header updated ****************************************************************/ void ExecFunc( int val ) { extern int Verbose; if (Verbose) printf("Execute function for button %d\n", val); switch(val) { case 100: clearcalc(); break; case 101: sqrtnum(); break; case 102: charkey('7'); break; case 103: charkey('8'); break; case 104: charkey('9'); break; case 105: divnums(); break; case 106: sqrnum(); break; case 107: charkey('4'); break; case 108: charkey('5'); break; case 109: charkey('6'); break; case 110: multnums(); break; case 111: /* scinotation(); */ startcalc(); break; case 112: charkey('1'); break; case 113: charkey('2'); break; case 114: charkey('3'); break; case 115: subtnums(); break; case 116: chgsignnum(); break; case 117: charkey('0'); break; case 118: charkey('.'); break; case 119: equalfunc(); break; case 120: addnums(); break; case 200: clrallmem(); break; case 201: sqrtnum(); /* userdef201(); */ break; case 202: recallmem(7); break; case 203: recallmem(8); break; case 204: recallmem(9); break; case 205: divnums(); /* userdef205(); */ break; case 206: sqrnum(); /* userdef206(); */ break; case 207: recallmem(4); break; case 208: recallmem(5); break; case 209: recallmem(6); break; case 210: multnums(); /* userdef210(); */ break; case 211: startcalc(); break; case 212: recallmem(1); break; case 213: recallmem(2); break; case 214: recallmem(3); break; case 215: subtnums(); /* userdef215(); */ break; case 216: chgsignnum(); break; case 217: recallmem(0); break; case 218: /* userdef218(); */ break; case 219: equalfunc(); break; case 220: addnums(); /* userdef220(); */ break; case 300: clearnum(); break; case 301: sqrtnum(); /* userdef301(); */ break; case 302: stormem(7); break; case 303: stormem(8); break; case 304: stormem(9); break; case 305: divnums(); /* userdef305(); */ break; case 306: sqrnum(); /* userdef306(); */ break; case 307: stormem(4); break; case 308: stormem(5); break; case 309: stormem(6); break; case 310: multnums(); /* userdef310(); */ break; case 311: startcalc(); break; case 312: stormem(1); break; case 313: stormem(2); break; case 314: stormem(3); break; case 315: subtnums(); /* userdef315(); */ break; case 316: chgsignnum(); break; case 317: stormem(0); break; case 318: /* userdef318(); */ break; case 319: equalfunc(); break; case 320: addnums(); /* userdef320(); */ break; } /* End of switch statement */ } /* End of function ExecFunc() *********************************/ /**************************************************************** * Function: getboundaries **************************************************************** Description: This function returns the x,y boundaries for each character that is to be displayed on the display. There must be a better way to do this, as by changing the file charmap.xpm, one may have to adjust these constants. Change History: Date Modification 11/01/00 Function header updated 10/30/00 Added characters for the Memory indicator bar. ****************************************************************/ ButtonArea getboundaries(char ch) { ButtonArea xybounds; switch (ch) { case '0': xybounds.x = 1; xybounds.i = 6; xybounds.y = 1; xybounds.j = 8; break; case '1': xybounds.x = 7; xybounds.i = 12; xybounds.y = 1; xybounds.j = 8; break; case '2': xybounds.x = 13; xybounds.i = 18; xybounds.y = 1; xybounds.j = 8; break; case '3': xybounds.x = 19; xybounds.i = 24; xybounds.y = 1; xybounds.j = 8; break; case '4': xybounds.x = 25; xybounds.i = 30; xybounds.y = 1; xybounds.j = 8; break; case '5': xybounds.x = 31; xybounds.i = 36; xybounds.y = 1; xybounds.j = 8; break; case '6': xybounds.x = 37; xybounds.i = 42; xybounds.y = 1; xybounds.j = 8; break; case '7': xybounds.x = 43; xybounds.i = 48; xybounds.y = 1; xybounds.j = 8; break; case '8': xybounds.x = 49; xybounds.i = 54; xybounds.y = 1; xybounds.j = 8; break; case '9': xybounds.x = 55; xybounds.i = 60; xybounds.y = 1; xybounds.j = 8; break; case '+': xybounds.x = 55; xybounds.i = 60; xybounds.y = 28; xybounds.j = 35; break; case '-': xybounds.x = 49; xybounds.i = 54; xybounds.y = 28; xybounds.j = 35; break; case '.': xybounds.x = 7; xybounds.i = 12; xybounds.y = 10; xybounds.j = 17; break; case 'e': xybounds.x = 1; xybounds.i = 6; xybounds.y = 37; xybounds.j = 44; break; case 'i': xybounds.x = 7; xybounds.i = 12; xybounds.y = 37; xybounds.j = 44; break; case 'j': xybounds.x = 13; xybounds.i = 18; xybounds.y = 37; xybounds.j = 44; break; case 'n': xybounds.x = 19; xybounds.i = 24; xybounds.y = 37; xybounds.j = 44; break; case 'a': xybounds.x = 25; xybounds.i = 30; xybounds.y = 37; xybounds.j = 44; break; case 'f': xybounds.x = 31; xybounds.i = 36; xybounds.y = 37; xybounds.j = 44; break; case ' ': xybounds.x = 1; xybounds.i = 6; xybounds.y = 10; xybounds.j = 17; break; case '=': xybounds.x = 55; xybounds.i = 60; xybounds.y = 55; xybounds.j = 56; break; case '#': xybounds.x = 55; xybounds.i = 60; xybounds.y = 57; xybounds.j = 58; break; case '_': xybounds.x = 55; xybounds.i = 60; xybounds.y = 59; xybounds.j = 60; break; default: xybounds.x = 1; xybounds.i = 6; xybounds.y = 10; xybounds.j = 17; break; } /* end of switch statement */ return(xybounds); } /***** End of function getboundaries() ************************/ /**************************************************************** * Function: write_config **************************************************************** Description: This function updates the configuration file as memory locations are updated in the program. It re-writes the entire file, but should ignore all lines that do not start with "Mem". Change History: Date Modification 11/01/00 Function Header updated 11/05/00 Added Locked Memory Handling ****************************************************************/ int write_config(void) { extern int Verbose; extern double MemArray[]; extern char configfile[]; extern char tempfile[]; extern char *CfgVarList[]; FILE *fp, *fptmp; char *line = NULL; int mem_ndx = 0; int err_code = OKAY; char movefilecmd[2 * CONFIGFILEMAX + 10]; /* make sure enough room in string */ /* Open current Config file */ if ((fp = fopen(configfile, "r")) == NULL) { /* Can't find config file */ printf("%s: Cannot create configuration file\n", configfile); return(ERR_FILE_NOT_FOUND); } /* We cannot write to the global config-file... */ if(!strcmp(configfile, CONFIGGLOBAL)) { strcpy(configfile, getenv("HOME")); /* Added to wmbutton by Gordon Fraser, 9/21/01 */ strcat(configfile, CONFFILENAME); } /* Open Temporary File */ if ((fptmp = fopen(tempfile, "w")) == NULL) { /* Can't open file in /tmp */ fprintf(stderr, "%s: Temporary File Open Failed\n", tempfile); strcpy(tempfile, getenv("HOME")); strcat(tempfile, "wmcalc.tmp"); if ((fptmp = fopen(tempfile, "w")) == NULL) { /* Can't open file in HOME */ fprintf(stderr, "%s: Temporary File Open Failed\n", tempfile); return(ERR_TMP_FILE_FAILED); } } while ((line = readln(fp)) != NULL) { /* Read Lines in config file */ if (Verbose) printf("line:%s", line); if ((strncmp(line, CfgVarList[MEM_LABEL_0], strlen(CfgVarList[MEM_LABEL_0]) - 1) == 0)) { /* -1 to generalize to all Mem? strings */ /* If we've found a memory entry */ mem_ndx = atoi(line+strlen(CfgVarList[MEM_LABEL_0])-1); if ((mem_ndx >= 0) && (mem_ndx <= (NUM_MEM_CELLS - 1))) { fprintf(fptmp, "%s\t%f\n", CfgVarList[mem_ndx], MemArray[mem_ndx]); } } else { fprintf(fptmp, "%s", line); } free(line); } /* End of while loop */ /* Close open files */ fclose(fp); fclose(fptmp); /* Copy temp file over original */ /* Note: If changing command, make sure to adjust size of string above!! */ sprintf(movefilecmd, "mv -f %s %s\n", tempfile, configfile); err_code = system(movefilecmd); if(Verbose) printf("New config file written.\n"); return(err_code); } /***** End of function write_config() *************************/ /**************************************************************** * Function: read_config **************************************************************** Description: This function reads the configuration file on program startup, and sets the appropriate configuration options. (By default, this is ~/.wmcalc, or a user set value) Change History: Date Modification 11/01/00 Function header updated. 11/05/00 Added Lcoked Memory Capabilities ****************************************************************/ int read_config(void) { extern int Verbose; extern double MemArray[]; extern int MemLock[]; extern char *CfgVarList[]; extern char ImagChar; extern char configfile[]; extern char SysCalcCmd[]; FILE *fp; int i = 0; int err_code = OKAY; char *line = NULL; char sep_ch = '\t'; char *cfg_var_ptr = NULL; if ((fp = fopen(configfile, "r")) == NULL) { /* Can't find config file */ strcpy(configfile, CONFIGGLOBAL); /* ...so try to open global config */ if ((fp = fopen(configfile, "r")) == NULL) { /* Can't find global config file */ fprintf(stderr, "%s: Configuration File not found\n", configfile); return(ERR_FILE_NOT_FOUND); } else { write_config(); /* if global config opened, save in homedir */ } } else { if (Verbose) printf("%s: Found Configuration File\n", configfile); } do { /* Read Lines in config file */ line = readln(fp); if (Verbose) printf("Line Read:%s\n", line); if (line == NULL) break; /* if end of file, quit */ if ( (line[0] != '#') && (line[0] != '\n')) { /* Ignore comments and blanks */ if (strchr(line, sep_ch) != NULL) { /* The line has a tab, so let's see if the variable is understood */ i = 0; /* Loop while we haven't found the variable */ while (((strncmp(line, CfgVarList[i], strlen(CfgVarList[i]))) != 0) && (i < MAX_LABEL)) { i++; } /* If we've found the variable, let's set the appropriate value */ if (i <= MAX_LABEL) { if (Verbose) printf("Variable %s found\n", CfgVarList[i]); /* Point to the 'tab' character, to read the value */ cfg_var_ptr = strchr(line, sep_ch); cfg_var_ptr++; /* ++ to avoid tab character itself */ /* Now set the appropriate variable */ switch(i) { case MEM_LABEL_0: case MEM_LABEL_1: case MEM_LABEL_2: case MEM_LABEL_3: case MEM_LABEL_4: case MEM_LABEL_5: case MEM_LABEL_6: case MEM_LABEL_7: case MEM_LABEL_8: case MEM_LABEL_9: /* Set Locked Flag */ MemLock[i] = 0; /* Set Memory Element */ MemArray[i] = atof(cfg_var_ptr); if (Verbose) printf("Assign Memory Element %d to %f\n", i, MemArray[i]); break; case MEM_LOCK_0: case MEM_LOCK_1: case MEM_LOCK_2: case MEM_LOCK_3: case MEM_LOCK_4: case MEM_LOCK_5: case MEM_LOCK_6: case MEM_LOCK_7: case MEM_LOCK_8: case MEM_LOCK_9: /* Set Locked Flag */ MemLock[i - MEM_LOCK_0] = 1; /* Set Memory Element */ MemArray[i - MEM_LOCK_0] = atof(cfg_var_ptr); if (Verbose) printf("Assign Memory Element %d to %f\n", i - MEM_LOCK_0, MemArray[i - MEM_LOCK_0]); break; case IMAG_LABEL: /* Get the character that the user wishes to use to represent sqrt(-1) (i or j) */ if ((cfg_var_ptr[0] == 'i') || cfg_var_ptr[0] == 'j') { ImagChar = cfg_var_ptr[0]; } if (Verbose) printf("Use character '%c' to represent sqrt(-1)\n", ImagChar); break; case CALC_LABEL: /* Set external calculator start command */ strcpy(SysCalcCmd, cfg_var_ptr); if (Verbose) printf("Assign Calc Command: %s\n", cfg_var_ptr); break; default: if (Verbose) printf("Unknown Config Variable: %s\n", line); break; } } /* Otherwise, we don't recognize the variable */ else { if (Verbose) printf("Unknown Config Variable: %s\n", line); } } /* Otherwise, we had a poorly formatted line in the config file. */ else { if (Verbose) printf("Poorly formatted config file line\n:%s\n", line); } } free(line); } while (line != NULL); fclose(fp); return(err_code); } /***** End of function read_config **************************/