From a50001bbe906b443b894f3ce3583f69a6b581f32 Mon Sep 17 00:00:00 2001 From: Doug Torrance Date: Sat, 10 Jan 2015 10:59:41 -0600 Subject: [PATCH] wmcalc: Add version 0.4 to repository. Source obtained from: ftp://ftp.afterstep.org/stable/rpms/misc-tarballs/wmcalc-0.4.tar.gz --- wmcalc/.wmcalc | 35 ++ wmcalc/.wmcalc.bk | 35 ++ wmcalc/.wmcalc.bkp | 35 ++ wmcalc/COPYING | 339 ++++++++++++++ wmcalc/Makefile | 28 ++ wmcalc/README | 212 +++++++++ wmcalc/backdrop.xpm | 126 ++++++ wmcalc/calcbuttons.xpm | 47 ++ wmcalc/charmap-colors.xpm | 79 ++++ wmcalc/charmap.xpm | 71 +++ wmcalc/charmap_old.xpm | 70 +++ wmcalc/main.xpm | 73 +++ wmcalc/mask.xbm | 67 +++ wmcalc/readln.c | 59 +++ wmcalc/wmcalc.c | 909 ++++++++++++++++++++++++++++++++++++++ wmcalc/wmcalc.conf | 35 ++ wmcalc/wmcalc1.xpm | 137 ++++++ wmcalc/wmcalc2.xpm | 131 ++++++ wmcalc/wmcalc3.xpm | 131 ++++++ wmcalc/wmcalc_c.h | 38 ++ wmcalc/wmcalc_err.h | 31 ++ wmcalc/wmcalc_f.h | 80 ++++ wmcalc/wmcalc_g.h | 73 +++ wmcalc/wmcalc_t.h | 54 +++ wmcalc/wmcalc_x.h | 30 ++ wmcalc/wmcalcfunc.c | 525 ++++++++++++++++++++++ wmcalc/wmcalcscr.xpm | 128 ++++++ wmcalc/wmcalcscr2.gif | Bin 0 -> 2307 bytes wmcalc/wmcalcscr2.xpm | 128 ++++++ wmcalc/wmcalcsrc.jpg | Bin 0 -> 2520 bytes wmcalc/wmcalcswitch.c | 605 +++++++++++++++++++++++++ 31 files changed, 4311 insertions(+) create mode 100644 wmcalc/.wmcalc create mode 100644 wmcalc/.wmcalc.bk create mode 100644 wmcalc/.wmcalc.bkp create mode 100644 wmcalc/COPYING create mode 100644 wmcalc/Makefile create mode 100644 wmcalc/README create mode 100644 wmcalc/backdrop.xpm create mode 100644 wmcalc/calcbuttons.xpm create mode 100644 wmcalc/charmap-colors.xpm create mode 100644 wmcalc/charmap.xpm create mode 100644 wmcalc/charmap_old.xpm create mode 100644 wmcalc/main.xpm create mode 100644 wmcalc/mask.xbm create mode 100644 wmcalc/readln.c create mode 100644 wmcalc/wmcalc.c create mode 100644 wmcalc/wmcalc.conf create mode 100644 wmcalc/wmcalc1.xpm create mode 100644 wmcalc/wmcalc2.xpm create mode 100644 wmcalc/wmcalc3.xpm create mode 100644 wmcalc/wmcalc_c.h create mode 100644 wmcalc/wmcalc_err.h create mode 100644 wmcalc/wmcalc_f.h create mode 100644 wmcalc/wmcalc_g.h create mode 100644 wmcalc/wmcalc_t.h create mode 100644 wmcalc/wmcalc_x.h create mode 100644 wmcalc/wmcalcfunc.c create mode 100644 wmcalc/wmcalcscr.xpm create mode 100644 wmcalc/wmcalcscr2.gif create mode 100644 wmcalc/wmcalcscr2.xpm create mode 100644 wmcalc/wmcalcsrc.jpg create mode 100644 wmcalc/wmcalcswitch.c diff --git a/wmcalc/.wmcalc b/wmcalc/.wmcalc new file mode 100644 index 0000000..d6f110d --- /dev/null +++ b/wmcalc/.wmcalc @@ -0,0 +1,35 @@ +# 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 diff --git a/wmcalc/.wmcalc.bk b/wmcalc/.wmcalc.bk new file mode 100644 index 0000000..235f5c7 --- /dev/null +++ b/wmcalc/.wmcalc.bk @@ -0,0 +1,35 @@ +# 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.1415926535 +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 diff --git a/wmcalc/.wmcalc.bkp b/wmcalc/.wmcalc.bkp new file mode 100644 index 0000000..235f5c7 --- /dev/null +++ b/wmcalc/.wmcalc.bkp @@ -0,0 +1,35 @@ +# 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.1415926535 +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 diff --git a/wmcalc/COPYING b/wmcalc/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/wmcalc/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: 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) 19yy + + 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., 675 Mass Ave, Cambridge, MA 02139, 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) 19yy 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 Library General +Public License instead of this License. diff --git a/wmcalc/Makefile b/wmcalc/Makefile new file mode 100644 index 0000000..ccc305a --- /dev/null +++ b/wmcalc/Makefile @@ -0,0 +1,28 @@ +INCLUDES =-I/usr/X11R6/include/X11 -I/usr/local/include +LIBINC =-L/usr/X11R6/lib +LIBS = -lX11 -lXpm -lXext -lm + +TARGET = wmcalc +OBJECTS = wmcalc.o readln.o wmcalcswitch.o wmcalcfunc.o +DESTDIR = +PREFIX = /usr/local +BINDIR = ${PREFIX}/bin +MANDIR = ${PREFIX}/share/man +CONF = /etc +INSTALL = /usr/bin/install +INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755 +INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644 + +.c.o: + gcc -O2 -c -Wall ${INCLUDES} ${FLAGS} $< -o $*.o + +${TARGET}: ${OBJECTS} + gcc -O2 -o ${TARGET} ${OBJECTS} ${LIBINC} ${LIBS} + +clean:: + for i in ${OBJECTS}; do if [ -e $$i ] ; then rm $$i; fi; done + if [ -e ${TARGET} ] ; then rm ${TARGET}; fi + +install:: + ${INSTALL_PROGRAM} wmcalc ${DESTDIR}${BINDIR} + ${INSTALL_FILE} wmcalc.conf ${DESTDIR}${CONF} diff --git a/wmcalc/README b/wmcalc/README new file mode 100644 index 0000000..e4f7ecd --- /dev/null +++ b/wmcalc/README @@ -0,0 +1,212 @@ +wmcalc Ver. 0 Rel 4 +------------------------------------------------------------- + Code is loosely based on wmppp, wmload, wmtime, wmcp, and asbutton + Original Author: Edward H. Flora + Current Maintainer: Gordon Fraser + Ver 0 Rel 4 May 25, 2002 + +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: +------------- + Untar the file: + tar xvzf wmcalc-0.3.tar.gz + + CD to source directory: + cd wmcalc-0.3 + + Compile it: + make clean; make + + Copy the config file: + cp .wmcalc ~ + + Put the executable somewhere in your path: + mv wmcalc /usr/local/bin (or anyhere in your path) + + 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!?!?!?!?!?!?" + +CHANGE LOG: +----------- +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. + +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. diff --git a/wmcalc/backdrop.xpm b/wmcalc/backdrop.xpm new file mode 100644 index 0000000..728f451 --- /dev/null +++ b/wmcalc/backdrop.xpm @@ -0,0 +1,126 @@ +/* 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+", +".+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"}; diff --git a/wmcalc/calcbuttons.xpm b/wmcalc/calcbuttons.xpm new file mode 100644 index 0000000..39fe476 --- /dev/null +++ b/wmcalc/calcbuttons.xpm @@ -0,0 +1,47 @@ +/* XPM */ +static char * calcbuttons_xpm[] = { +"53 40 4 1", +" c None", +". c #FFFFFF", +"+ c #D5D6D5", +"@ c #000000", +"...........+.........+.........+.........+..........+", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++@+++@", +".++++@@@@++@.+@@@@@++@.++@@@+++@.++@@@+++@++++++@+++@", +".++++@+++++@.+++++@++@.+@+++@++@.+@+++@++@+++++@++++@", +".++++@+++++@.++++@+++@.++@@@+++@.+@+++@++@++++@+++++@", +".++@+@+++++@.+++@++++@.+@+++@++@.++@@@@++@+++@++++++@", +".+++@@+++++@.+++@++++@.+@+++@++@.+++++@++@++@+++++++@", +".++++@+++++@.+++@++++@.++@@@+++@.++@@@+++@++@+++++++@", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +"+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", +"...........+.........+.........+.........+..........+", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +".++++++@+++@.++++@+++@.+@@@@@++@.++@@@+++@++@+++@+++@", +".+++++++@++@.+@++@+++@.+@++++++@.+@++++++@+++@+@++++@", +".++++++@+++@.+@++@+++@.+@@@@+++@.+@@@@+++@++++@+++++@", +".++@+@+@@++@.+@@@@@++@.+++++@++@.+@+++@++@+++@+@++++@", +".+++@++++++@.++++@+++@.+@+++@++@.+@+++@++@++@+++@+++@", +".++@+@+++++@.++++@+++@.++@@@+++@.++@@@+++@++++++++++@", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +"+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", +"...........+.........+.........+.........+..........+", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +".+@@@@@@@@+@.++++@+++@.++@@@+++@.+@@@@+++@++++++++++@", +".+@++++++@+@.+++@@+++@.+@+++@++@.+++++@++@++++++++++@", +".+@@@@@@@@+@.++++@+++@.+++++@++@.++@@@+++@++@@@@@+++@", +".+@+@+@+@@+@.++++@+++@.++@@@+++@.+++++@++@++++++++++@", +".+@@+@+@+@+@.++++@+++@.+@++++++@.+@+++@++@++++++++++@", +".+@@@@@@@@+@.+++@@@++@.+@@@@@++@.++@@@+++@++++++++++@", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +"+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@", +"...........+.........+.........+.........+..........+", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +".+++@+++@++@.++@@@+++@.++++++++@.++++++++@++++@+++++@", +".++@@@+@+++@.+@+++@++@.++++++++@.++@@@@++@++++@+++++@", +".+++@+@++++@.+@+++@++@.++++++++@.++++++++@++@@@@@+++@", +".++++@+++++@.+@+++@++@.++++++++@.++@@@@++@++++@+++++@", +".+++@++++++@.+@+++@++@.+++@@+++@.++++++++@++++@+++++@", +".++@++@@@++@.++@@@+++@.+++@@+++@.++++++++@++++++++++@", +".++++++++++@.++++++++@.++++++++@.++++++++@++++++++++@", +"+@@@@@@@@@@@+@@@@@@@@@+@@@@@@@@@+@@@@@@@@@@@@@@@@@@@@"}; diff --git a/wmcalc/charmap-colors.xpm b/wmcalc/charmap-colors.xpm new file mode 100644 index 0000000..64d064c --- /dev/null +++ b/wmcalc/charmap-colors.xpm @@ -0,0 +1,79 @@ +/* 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", +".............................................................", +".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", +".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", +".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", +".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", +".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", +".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", +".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", +".............................................................", +".............................................................", +".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", +".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", +".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", +".............................................................", +".............................................................", +".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", +".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", +".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", +".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", +".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", +".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", +".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", +".............................................................", +".............................................................", +".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", +".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", +".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", +".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", +".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", +".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", +".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", +".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", +".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", +".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", +".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", +".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++..@@@..", +".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++.@@@@@.", +".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", +".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++..+++..", +".$###$.&%%%&.=***=.@+++@.;---;.+++++.+++++.+++++.+++++.+++++.", +".#$$$#.%&&&%.*===*.+@@@+.-;;;-.+++++.+++++.+++++.+++++.......", +".............................................................", +".$$$$$.&&&&&.=====.@@@@@.;;;;;.#####.%%%%%.*****.+++++.------"}; diff --git a/wmcalc/charmap.xpm b/wmcalc/charmap.xpm new file mode 100644 index 0000000..57e79cd --- /dev/null +++ b/wmcalc/charmap.xpm @@ -0,0 +1,71 @@ +/* XPM */ +static char * charmap_xpm[] = { +"61 63 5 1", +" c None", +". c #000000", +"+ c #003F18", +"@ c #00FF00", +"# c #D30000", +".............................................................", +".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", +".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", +".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", +".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", +".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", +".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", +".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", +".............................................................", +".............................................................", +".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", +".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", +".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", +".............................................................", +".............................................................", +".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", +".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", +".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", +".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", +".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", +".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", +".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", +".............................................................", +".............................................................", +".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", +".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", +".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", +".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", +".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", +".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", +".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", +".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", +".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", +".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", +".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..###..", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.#####.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", +"............................................................."}; diff --git a/wmcalc/charmap_old.xpm b/wmcalc/charmap_old.xpm new file mode 100644 index 0000000..5ece27f --- /dev/null +++ b/wmcalc/charmap_old.xpm @@ -0,0 +1,70 @@ +/* XPM */ +static char * charmap_xpm[] = { +"61 63 4 1", +" c None", +". c #000000", +"+ c #003F18", +"@ c #00FF00", +".............................................................", +".+@@@+.++@++.+@@@+.@@@@@.+++@+.@@@@@.++@@+.@@@@@.+@@@+.+@@@+.", +".@+++@.+@@++.@+++@.+++@+.++@@+.@++++.+@+++.++++@.@+++@.@+++@.", +".@+++@.++@++.++++@.++@++.+@+@+.@@@@+.@++++.+++@+.@+++@.@+++@.", +".@+++@.++@++.+++@+.+++@+.@++@+.++++@.@@@@+.++@++.+@@@+.+@@@@.", +".@+++@.++@++.++@++.++++@.@@@@@.++++@.@+++@.+@+++.@+++@.++++@.", +".@+++@.++@++.+@+++.@+++@.+++@+.@+++@.@+++@.+@+++.@+++@.+++@+.", +".+@@@+.+@@@+.@@@@@.+@@@+.+++@+.+@@@+.+@@@+.+@+++.+@@@+.+@@++.", +".............................................................", +".............................................................", +".+++++.+++++.+@@@+.@@@@+.+@@@+.@@@@+.@@@@@.@@@@@.+@@@+.@+++@.", +".+++++.+++++.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@++++.@+++@.", +".+++++.+++++.@@@@@.@@@@+.@++++.@+++@.@@@@+.@@@@+.@+@@@.@@@@@.", +".+++++.+++++.@+++@.@+++@.@++++.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@+++@.@+++@.@+++@.@++++.@++++.@+++@.@+++@.", +".+++++.++@@+.@+++@.@@@@+.+@@@+.@@@@+.@@@@@.@++++.+@@@@.@+++@.", +".............................................................", +".............................................................", +".+@@@+.++@@@.@+++@.@++++.@+++@.@+++@.++@++.@@@@+.+@@@+.@@@@+.", +".++@++.+++@+.@++@+.@++++.@@+@@.@+++@.+@+@+.@+++@.@+++@.@+++@.", +".++@++.+++@+.@+@++.@++++.@+@+@.@@++@.@+++@.@+++@.@+++@.@+++@.", +".++@++.+++@+.@@+++.@++++.@+@+@.@+@+@.@+++@.@@@@+.@+++@.@@@@+.", +".++@++.+++@+.@+@++.@++++.@+++@.@++@@.@+++@.@++++.@+@+@.@+@++.", +".++@++.@++@+.@++@+.@++++.@+++@.@+++@.+@+@+.@++++.@++@+.@++@+.", +".+@@@+.+@@++.@+++@.@@@@@.@+++@.@+++@.++@++.@++++.+@@+@.@+++@.", +".............................................................", +".............................................................", +".+@@@@.@@@@@.@+++@.@+++@.@+++@.@+++@.@+++@.@@@@@.+++++.+++++.", +".@++++.++@++.@+++@.@+++@.@+++@.@+++@.@+++@.++++@.+++++.++@++.", +".@++++.++@++.@+++@.@+++@.@+++@.+@+@+.@+++@.+++@+.+++++.++@++.", +".+@@@+.++@++.@+++@.@+++@.@+@+@.++@++.+@+@+.++@++.@@@@@.@@@@@.", +".++++@.++@++.@+++@.@+++@.@+@+@.+@+@+.++@++.+@+++.+++++.++@++.", +".++++@.++@++.@+++@.+@+@+.@+@+@.@+++@.++@++.@++++.+++++.++@++.", +".@@@@+.++@++.+@@@+.++@++.+@+@+.@+++@.++@++.@@@@@.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++@+.+++++.+++++.++@@+.+++++.+++++.+++++.+++++.", +".+++++.++@++.+++++.+++++.+++++.+@++@.+++++.+++++.+++++.+++++.", +".+@@@@.+++++.++@@+.@+@@+.+@@@+.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.+@@++.+++@+.@@++@.++++@.@@@++.+++++.+++++.+++++.+++++.", +".+@@@+.++@++.+++@+.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".+@+++.++@++.@++@+.@+++@.@+++@.+@+++.+++++.+++++.+++++.+++++.", +".+@@@@.+@@@+.+@@++.@+++@.+@@@@.+@+++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".............................................................", +".............................................................", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..@@@..", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.@@@@@.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++..+++..", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.", +".+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.+++++.......", +"............................................................."}; diff --git a/wmcalc/main.xpm b/wmcalc/main.xpm new file mode 100644 index 0000000..f34db30 --- /dev/null +++ b/wmcalc/main.xpm @@ -0,0 +1,73 @@ +/* XPM */ +static char * main_xpm[] = { +"64 64 6 1", +" c None", +". c #000000", +"+ c #C7C7C7", +"@ c #003F18", +"# c #FFFFFF", +"$ c #D5D6D5", +" ", +" ", +" ", +" ", +" ..............................................................", +" .............................................................+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .............................................................+", +" ..@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@..+", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+", +" .............................................................+", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +" .###########$#########$#########$#########$##########$.+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$.$$$..+ ", +" .#$$$$....$$.#$.....$$.#$$...$$$.#$$...$$$.$$$$$$.$$$..+ ", +" .#$$$$.$$$$$.#$$$$$.$$.#$.$$$.$$.#$.$$$.$$.$$$$$.$$$$..+ ", +" .#$$$$.$$$$$.#$$$$.$$$.#$$...$$$.#$.$$$.$$.$$$$.$$$$$..+ ", +" .#$$.$.$$$$$.#$$$.$$$$.#$.$$$.$$.#$$....$$.$$$.$$$$$$..+ ", +" .#$$$..$$$$$.#$$$.$$$$.#$.$$$.$$.#$$$$$.$$.$$.$$$$$$$..+ ", +" .#$$$$.$$$$$.#$$$.$$$$.#$$...$$$.#$$...$$$.$$.$$$$$$$..+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .$...........$.........$.........$.....................+ ", +" .###########$#########$#########$#########$##########$.+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .#$$$$$$.$$$.#$$$$.$$$.#$.....$$.#$$...$$$.$$.$$$.$$$..+ ", +" .#$$$$$$$.$$.#$.$$.$$$.#$.$$$$$$.#$.$$$$$$.$$$.$.$$$$..+ ", +" .#$$$$$$.$$$.#$.$$.$$$.#$....$$$.#$....$$$.$$$$.$$$$$..+ ", +" .#$$.$.$..$$.#$.....$$.#$$$$$.$$.#$.$$$.$$.$$$.$.$$$$..+ ", +" .#$$$.$$$$$$.#$$$$.$$$.#$.$$$.$$.#$.$$$.$$.$$.$$$.$$$..+ ", +" .#$$.$.$$$$$.#$$$$.$$$.#$$...$$$.#$$...$$$.$$$$$$$$$$..+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .$...........$.........$.........$.....................+ ", +" .###########$#########$#########$#########$##########$.+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .#$$$$$$$$$$.#$$$$.$$$.#$$...$$$.#$....$$$.$$$$$$$$$$..+ ", +" .#$$....$$$$.#$$$..$$$.#$.$$$.$$.#$$$$$.$$.$$$$$$$$$$..+ ", +" .#$$.$$$$$$$.#$$$$.$$$.#$$$$$.$$.#$$...$$$.$$.....$$$..+ ", +" .#$$...$$$$$.#$$$$.$$$.#$$...$$$.#$$$$$.$$.$$$$$$$$$$..+ ", +" .#$$.$$$$$$$.#$$$$.$$$.#$.$$$$$$.#$.$$$.$$.$$$$$$$$$$..+ ", +" .#$$....$$$$.#$$$...$$.#$.....$$.#$$...$$$.$$$$$$$$$$..+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .$...........$.........$.........$.....................+ ", +" .###########$#########$#########$#########$##########$.+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .#$$$.$$$.$$.#$$...$$$.#$$$$$$$$.#$$$$$$$$.$$$$.$$$$$..+ ", +" .#$$...$.$$$.#$.$$$.$$.#$$$$$$$$.#$$....$$.$$$$.$$$$$..+ ", +" .#$$$.$.$$$$.#$.$$$.$$.#$$$$$$$$.#$$$$$$$$.$$.....$$$..+ ", +" .#$$$$.$$$$$.#$.$$$.$$.#$$$$$$$$.#$$....$$.$$$$.$$$$$..+ ", +" .#$$$.$$$$$$.#$.$$$.$$.#$$$..$$$.#$$$$$$$$.$$$$.$$$$$..+ ", +" .#$$.$$...$$.#$$...$$$.#$$$..$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .#$$$$$$$$$$.#$$$$$$$$.#$$$$$$$$.#$$$$$$$$.$$$$$$$$$$..+ ", +" .$...........$.........$.........$.....................+ ", +" .......................................................+ ", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ", +" ", +" ", +" ", +" "}; diff --git a/wmcalc/mask.xbm b/wmcalc/mask.xbm new file mode 100644 index 0000000..ef7f31a --- /dev/null +++ b/wmcalc/mask.xbm @@ -0,0 +1,67 @@ +#define mask_width 64 +#define mask_height 64 + +static 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 }; diff --git a/wmcalc/readln.c b/wmcalc/readln.c new file mode 100644 index 0000000..23447e4 --- /dev/null +++ b/wmcalc/readln.c @@ -0,0 +1,59 @@ +/* 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 ****************************************/ + diff --git a/wmcalc/wmcalc.c b/wmcalc/wmcalc.c new file mode 100644 index 0000000..19990a6 --- /dev/null +++ b/wmcalc/wmcalc.c @@ -0,0 +1,909 @@ +/**************************************************************** + * 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; + int chcnt = 0; + + + 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<11; i++) DispString[i] = ' '; + DispString[11] = '\0'; + + /* Parse Command Line Arguments */ + for ( i=1; i < argc; i++ ) { + if ( *argv[i] == '-' ) { + switch ( *(argv[i]+1) ) { + case 'v': // Turn on Verbose (debugging) Mode + Verbose = 1; + break; + case 'g': // Set Geometry Options + if ( ++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, + 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 */ + chcnt = 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 **************************/ diff --git a/wmcalc/wmcalc.conf b/wmcalc/wmcalc.conf new file mode 100644 index 0000000..d6f110d --- /dev/null +++ b/wmcalc/wmcalc.conf @@ -0,0 +1,35 @@ +# 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 diff --git a/wmcalc/wmcalc1.xpm b/wmcalc/wmcalc1.xpm new file mode 100644 index 0000000..0f3e7a3 --- /dev/null +++ b/wmcalc/wmcalc1.xpm @@ -0,0 +1,137 @@ +/* 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", +" . ", +" . ", +" . ", +" . ", +" ........................................................ . .......................................................+ ", +" .......................................................+ . .......................................................+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ . .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", +" .......................................................+ . .......................................................+ ", +" ..@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@.@@@@....+ . .......................................................+ ", +" .......................................................+ . ", +" .+++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .......................................................+ ", +" .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .......................................................+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%.%%%..+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", +" .$%%%....%.$%.....%%.$%%...%%%.$%%%..%%%.$%%%%%%%.%%%..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", +" .$%%%.%%%%.$%%%%%.%%.$%.%%%.%%.$%%.%%.%%.$%%%%%%.%%%%..+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", +" .$%%%.%%%%.$%%%%.%%%.$%%...%%%.$%%.%%.%%.$%%%%%.%%%%%..+ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", +" .$%.%.%%%%.$%%%.%%%%.$%.%%%.%%.$%%%...%%.$%%%%.%%%%%%..+ . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", +" .$%%..%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.$%%%.%%%%%%%..+ . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", +" .$%%%.%%%%.$%%%.%%%%.$%%...%%%.$%%%..%%%.$%%%.%%%%%%%..+ . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", +" .%.........%.........%.........%.........%.............+ . .......................................................+ ", +" .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . ", +" .$%%%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", +" .$%%%%%%.%.$%%%%.%%%.$%%....%%.$%%%..%%%.$%%%.%%%.%%%..+ . .......................................................+ ", +" .$%%%%%.%%.$%.%%.%%%.$%%.%%%%%.$%%.%%%%%.$%%%%.%.%%%%..+ . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%%%%..%.$%.%%.%%%.$%%...%%%.$%%...%%%.$%%%%%.%%%%%..+ . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", +" .$%.%.%%%%.$%.....%%.$%%%%%.%%.$%%.%%.%%.$%%%%.%.%%%%..+ . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%.%%%%%.$%%%%.%%%.$%%.%%.%%.$%%.%%.%%.$%%%.%%%.%%%..+ . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%.%.%%%%.$%%%%.%%%.$%%%..%%%.$%%%..%%%.$%%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", +" .%.........%.........%.........%.........%.............+ . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", +" .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .......................................................+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", +" .$%%%%%%%%.$%%%%.%%%.$%%%..%%%.$%%...%%%.$%%%%%%%%%%%..+ . ", +" .$%%....%%.$%%%..%%%.$%%.%%.%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .......................................................+ ", +" .$%%.%%%%%.$%%%%.%%%.$%%%%%.%%.$%%%..%%%.$%%%.....%%%..+ . .......................................................+ ", +" .$%%...%%%.$%%%%.%%%.$%%%..%%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", +" .$%%.%%%%%.$%%%%.%%%.$%%.%%%%%.$%%%%%.%%.$%%%%%%%%%%%..+ . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", +" .$%%....%%.$%%%...%%.$%%....%%.$%%...%%%.$%%%%%%%%%%%..+ . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", +" .%.........%.........%.........%.........%.............+ . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", +" .$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$$$%.+ . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", +" .$%%.%%%%%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .......................................................+ ", +" .$%...%%.%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%%%.%%%%%..+ . .......................................................+ ", +" .$%%.%%.%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.$%%%%%.%%%%%..+ . ", +" .$%%%%.%%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%.....%%%..+ . ", +" .$%%%.%%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.$%%%%%.%%%%%..+ . .......................................................+ ", +" .$%%.%%..%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.$%%%%%.%%%%%..+ . .......................................................+ ", +" .$%%%%%%%%.$%%...%%%.$%%%..%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .@#@@@.##@@###@@@@#@@####@@##@.####@.##@@@##@@@##@@@@@.+ ", +" .$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%%%%..+ . .##@@@#@@#@@.@#@#@#@@#@@.@#@@@.@@@#@#@@#@#.@#@#@.#@@@@.+ ", +" .%.........%.........%.........%.........%.............+ . .@#@@@.@@#@@.@#@#@#@@###.@#@@@.@@@#@#@@#@#.@#@#@.#@@@@.+ ", +" .......................................................+ . .@#@@@@@#@@@##@@#@#@@@@@#@###@.@@#@@@##@@@###@#@.#@###.+ ", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .@#@@@@#@@@@.@#@####@@@@#@#@@#.@#@@@#@@#@@.@#@#@.#@@@@.+ ", +" . .@#@@@#@@@@@.@#@@@#@@#@@#@#@@#.@#@@@#@@#@@.@#@#@.#@@@@.+ ", +" . .###@@####@###@@@@#@@@##.@@##@.@#@@@.##@@@##@@@##@@@@@.+ ", +" . .......................................................+ ", +" . .......................................................+ ", +"................................................................. ", +" ", +" ............................................................. .......................................................+ ", +" .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. .......................................................+ ", +" .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .......................................................+ ", +" .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. .......................................................+ ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. ", +" .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ", +" .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .......................................................+ ", +" .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .......................................................+ ", +" .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .......................................................+ ", +" .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .......................................................+ ", +" .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. ", +" ............................................................. ", +" ............................................................. ", +" .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. .......................................................+ ", +" .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. .......................................................+ ", +" .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .......................................................+ ", +" .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .......................................................+ ", +" .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. ", +" .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. ", +" .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ....................................................... ", +" .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ..@@@@.####.&&&&.****.====.----.;;;;.>>>>.$$$$.,,,,.... ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ....................................................... ", +" ............................................................. ", +" ............................................................. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. "}; diff --git a/wmcalc/wmcalc2.xpm b/wmcalc/wmcalc2.xpm new file mode 100644 index 0000000..52b8526 --- /dev/null +++ b/wmcalc/wmcalc2.xpm @@ -0,0 +1,131 @@ +/* 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", +" . ", +" . ", +" . ", +" . ", +" ............................................................... .......................................................+ ", +" .............................................................+. .......................................................+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", +" .............................................................+. .......................................................+ ", +" ..@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@...@@@..+. .......................................................+ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.+. ", +" .............................................................+. .......................................................+ ", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. .......................................................+ ", +" .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%.%%%..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", +" .$%%%%....%%.$%.....%%.$%%...%%%.$%%...%%%.%%%%%%.%%%..+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", +" .$%%%%.%%%%%.$%%%%%.%%.$%.%%%.%%.$%.%%%.%%.%%%%%.%%%%..+ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", +" .$%%%%.%%%%%.$%%%%.%%%.$%%...%%%.$%.%%%.%%.%%%%.%%%%%..+ . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", +" .$%%.%.%%%%%.$%%%.%%%%.$%.%%%.%%.$%%....%%.%%%.%%%%%%..+ . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", +" .$%%%..%%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.%%.%%%%%%%..+ . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", +" .$%%%%.%%%%%.$%%%.%%%%.$%%...%%%.$%%...%%%.%%.%%%%%%%..+ . .......................................................+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", +" .%...........%.........%.........%.....................+ . ", +" .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .......................................................+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", +" .$%%%%%%.%%%.$%%%%.%%%.$%.....%%.$%%...%%%.%%.%%%.%%%..+ . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%%%%%%.%%.$%.%%.%%%.$%.%%%%%%.$%.%%%%%%.%%%.%.%%%%..+ . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", +" .$%%%%%%.%%%.$%.%%.%%%.$%....%%%.$%....%%%.%%%%.%%%%%..+ . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%.%.%..%%.$%.....%%.$%%%%%.%%.$%.%%%.%%.%%%.%.%%%%..+ . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%%.%%%%%%.$%%%%.%%%.$%.%%%.%%.$%.%%%.%%.%%.%%%.%%%..+ . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" .$%%.%.%%%%%.$%%%%.%%%.$%%...%%%.$%%...%%%.%%%%%%%%%%..+ . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", +" .%...........%.........%.........%.....................+ . .......................................................+ ", +" .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .......................................................+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . ", +" .$%%%%%%%%%%.$%%%%.%%%.$%%...%%%.$%....%%%.%%%%%%%%%%..+ . .......................................................+ ", +" .$%%....%%%%.$%%%..%%%.$%.%%%.%%.$%%%%%.%%.%%%%%%%%%%..+ . .......................................................+ ", +" .$%%.%%%%%%%.$%%%%.%%%.$%%%%%.%%.$%%...%%%.%%.....%%%..+ . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", +" .$%%...%%%%%.$%%%%.%%%.$%%...%%%.$%%%%%.%%.%%%%%%%%%%..+ . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", +" .$%%.%%%%%%%.$%%%%.%%%.$%.%%%%%%.$%.%%%.%%.%%%%%%%%%%..+ . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", +" .$%%....%%%%.$%%%...%%.$%.....%%.$%%...%%%.%%%%%%%%%%..+ . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", +" .%...........%.........%.........%.....................+ . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", +" .$$$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$$%.+ . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .......................................................+ ", +" .$%%%.%%%.%%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.%%%%.%%%%%..+ . .......................................................+ ", +" .$%%...%.%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.%%%%.%%%%%..+ . ", +" .$%%%.%.%%%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.%%.....%%%..+ . ", +" .$%%%%.%%%%%.$%.%%%.%%.$%%%%%%%%.$%%....%%.%%%%.%%%%%..+ . .......................................................+ ", +" .$%%%.%%%%%%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.%%%%.%%%%%..+ . .......................................................+ ", +" .$%%.%%...%%.$%%...%%%.$%%%..%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@@#@.@##@.###@.@@#@.####.@##@.####.@##@.@##@.@##@.@@@.+ ", +" .$%%%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.%%%%%%%%%%..+ . .@##@.#@@#.@@@#.#@#@.#@@@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", +" .%...........%.........%.........%.....................+ . .@@#@.@@@#.@@@#.#@#@.###@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", +" .......................................................+ . .@@#@.@@#@.@##@.#@#@.@@@#@###@.@@#@.@##@.@###.#@@#.###.+ ", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .@@#@.@#@@.@@@#.####.@@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", +" . .@@#@.#@@@.@@@#.@@#@.#@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", +" . .@###.####.###@.@@#@.@##..@##@.@#@@.@##@.@##@.@##@.@@@.+ ", +" . .......................................................+ ", +" . .......................................................+ ", +"................................................................. ", +" ", +" ............................................................. ", +" .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. ............................................................. ", +" .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. ............................................................. ", +" .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. ............................................................. ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ............................................................. ", +" .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", +" .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ............................................................. ", +" .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .....................................................@#@.@#@. ", +" ............................................................. .@@#@@.@@@@@.@@##@.@###@.@###@.@###@.@###@.@###@.....##@.#@#. ", +" ............................................................. .@##@@.@@@@@.@#@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.###.@#@.@##. ", +" .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@#@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....@#@.@@#. ", +" .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.####@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....###.@#@. ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#...........&& ", +" .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@#@@.@@##@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@###@@###@& ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .@###@.@@##@.@###@.@###@.@###@.@###@.@###@.@###@.@#@@@@#@@@@. ", +" .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .................................................@@##@@#@@@@. ", +" .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. ..###...@@@...###...@@@...###...###...@@@...@@@..@@@@#@#@@@@. ", +" ............................................................. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@###@@@###@. ", +" ............................................................. ............................................................. ", +" .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. ", +" .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. ............................................................. ", +" .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .....................................................@@@.@@@. ", +" .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@.@@@.@@@. ", +" .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@............. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .................................................@@@@@@@@@@@. ", +" .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ............................................................. ", +" .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@###@@###@ @####@#@@@@ @####@#@@#@ @@@@@@@@@@@ ", +" ............................................................. @#@@@@#@@@@ @#@@@@#@@@@ @#@@@@##@#@ @@@@@@@@@@@ ", +" ............................................................. @@##@@#@@@@ @###@@#@@@@ @###@@####@ @@@@@@@@@@@ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@@@#@#@@@@ @#@@@@#@@@@ @#@@@@#@##@ @@@@@@@@@@@ ", +" .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @###@@@###@ @#@@@@####@ @####@#@@#@ @@@@@@@@@@@ ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. "}; diff --git a/wmcalc/wmcalc3.xpm b/wmcalc/wmcalc3.xpm new file mode 100644 index 0000000..4ae16bc --- /dev/null +++ b/wmcalc/wmcalc3.xpm @@ -0,0 +1,131 @@ +/* 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", +" . ", +" . ", +" .............................................................+ . ", +" .@@@@@.@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ . ", +" .@@@@@.@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ . .......................................................+ ", +" .@@@@@.#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ . .......................................................+ ", +" .@@@@@.####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ . .@@@@@.@@@@@.#####.####@.####@.@@#@@.####@.@@@@@.@@@@@.+ ", +" .@@@@@.#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ . .@@@@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ . .@@@@@.@@@@@.####@.####@.####@.#@@@#.####@.@@@@@.@@@@@.+ ", +" .............................................................+ . .@@@@@.@@@@@.#@@@@.#@#@@.#@#@@.#@@@#.#@#@@.@@@@@.@@@@@.+ ", +" .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.@###@.#####.+ . .@@@@@.@@@@@.#@@@@.#@@#@.#@@#@.@#@#@.#@@#@.@@@@@.@@@@@.+ ", +" .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.#@@@#.@@@@#.+ . .@@@@@.@@@@@.#####.#@@@#.#@@@#.@@#@@.#@@@#.@@@@@.@@@@@.+ ", +" .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@@@#.@@@#@.+ . .......................................................+ ", +" .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.@@#@@.+ . .......................................................+ ", +" .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@#@@.@#@@@.+ . ", +" .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.@#@@@.@#@@@.+ . .......................................................+ ", +" .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.#####.@#@@@.+ . .......................................................+ ", +" .............................................................+ . .@@@@@.#####.@@@@@.@@#@@.@@@#@.@@#@@.#####.@###@.#####.+ ", +" ..###...@@@...@@@...###...###...@@@...@@@...###...@@@...###..+ . .@@@@@.@@@#@.@@@@@.@##@@.@@##@.@##@@.#@@@@.#@@@#.@@@#@.+ ", +" .............................................................+ . .@@@@@.@@#@@.@@@@@.@@#@@.@#@#@.@@#@@.####@.#@@@#.@@#@@.+ ", +" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . .#####.@@@#@.@@@@@.@@#@@.#@@#@.@@#@@.@@@@#.@####.@@@#@.+ ", +" $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .@@@@@.@@@@#.@@@@@.@@#@@.#####.@@#@@.@@@@#.@@@@#.@@@@#.+ ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@@@@.#@@@#.@@##@.@@#@@.@@@#@.@@#@@.#@@@#.@@@#@.#@@@#.+ ", +" $%%%%%%%%.$%%%....%.$%.....%%.$%%...%%%.$%%...%%%.$%%%%%.%%. . .@@@@@.@###@.@@##@.@###@.@@@#@.@###@.@###@.@##@@.@###@.+ ", +" $%......%.$%%%.%%%%.$%%%%%.%%.$%.%%%.%%.$%.%%%.%%.$%%%%%.%%. . .......................................................+ ", +" $%%.%%.%%.$%%%.%%%%.$%%%%.%%%.$%%...%%%.$%.%%%.%%.$%%%%.%%%. . .......................................................+ ", +" $%%.%%.%%.$%.%.%%%%.$%%%.%%%%.$%.%%%.%%.$%%....%%.$%%%.%%%%. . ", +" $%%.%%.%%.$%%..%%%%.$%%%.%%%%.$%.%%%.%%.$%%%%%.%%.$%%.%%%%%. . .......................................................+ ", +" $%%.%%.%%.$%%%.%%%%.$%%%.%%%%.$%%...%%%.$%%...%%%.$%%.%%%%%. . .......................................................+ ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .#@@@#.#@@@#.@###@.@###@.#@@@@.@###@.@@@@@.@@@@@.@@#@@.+ ", +" %.........%.........%.........%.........%.........%......... . .#@@@#.##@##.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@@@@.@##@@.+ ", +" $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .#@@@#.#@#@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" $%%%%%%%%.$%%%%..%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .#@#@#.#@#@#.#@@@@.#####.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" $%%%%%%%%.$%%%%%%.%.$%.%%.%%%.$%.....%%.$%%...%%%.$%.%%%.%%. . .#@#@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.@@@@@.@@@@@.@@#@@.+ ", +" $%%%..%%%.$%%%%%.%%.$%.%%.%%%.$%.%%%%%%.$%.%%%%%%.$%%.%.%%%. . .#@#@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@#.@@@@@.@@##@.@@#@@.+ ", +" $%%.%%.%%.$%%%%.%%%.$%.%%.%%%.$%....%%%.$%....%%%.$%%%.%%%%. . .@#@#@.#@@@#.@###@.#@@@#.#####.@###@.@@@@@.@@##@.@###@.+ ", +" $%%....%%.$.%.%...%.$%.....%%.$%%%%%.%%.$%.%%%.%%.$%%.%.%%%. . .......................................................+ ", +" $%%.%%%%%.$%.%%%%%%.$%%%%.%%%.$%.%%%.%%.$%.%%%.%%.$%.%%%.%%. . .......................................................+ ", +" $%%%..%%%.$.%.%%%%%.$%%%%.%%%.$%%...%%%.$%%...%%%.$%%%%%%%%. . ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", +" %.........%.........%.........%.........%.........%......... . .......................................................+ ", +" $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . .@@##@.@@@@@.@###@.@###@.@###@.@@@@@.@@@@@.@###@.#####.+ ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@#@@@.@@@@@.#@@@#.#@@@#.#@@@#.@@@@@.@@#@@.#@@@#.@@@#@.+ ", +" $%.%%%%%%.$%%%%%%%%.$%%%.%%%%.$%%...%%%.$%....%%%.$%%%%%%%%. . .#@@@@.@@@@@.#@@@#.@@@@#.@@@@#.@####.@@#@@.@@@@#.@@#@@.+ ", +" $%.%%%%%%.$%%....%%.$%%..%%%%.$%.%%%.%%.$%%%%%.%%.$%%%%%%%%. . .####@.@@@@@.#@@@#.@@@#@.@@@#@.@#@@@.#####.@@@#@.@@@#@.+ ", +" $%.%.%.%%.$%%.%%%%%.$%%%.%%%%.$%%%%%.%%.$%%...%%%.$%.....%%. . .#@@@#.@@@@@.#@@@#.@@#@@.@@#@@.@###@.@@#@@.@@#@@.@@@@#.+ ", +" $%.%..%.%.$%%...%%%.$%%%.%%%%.$%%...%%%.$%%%%%.%%.$%%%%%%%%. . .#@@@#.@@##@.#@@@#.@#@@@.@#@@@.@#@@@.@@#@@.@#@@@.#@@@#.+ ", +" $%.%.%%.%.$%%.%%%%%.$%%%.%%%%.$%.%%%%%%.$%.%%%.%%.$%%%%%%%%. . .@###@.@@##@.@###@.#####.#####.@####.@@@@@.#####.@###@.+ ", +" $%.%.%%.%.$%%....%%.$%%...%%%.$%.....%%.$%%...%%%.$%%%%%%%%. . .......................................................+ ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", +" %.........%.........%.........%.........%.........%......... . ", +" $$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$%$$$$$$$$$% . ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .......................................................+ ", +" $.%%%%.%%.$%%.%%%.%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%.%%%%. . .......................................................+ ", +" $.%.%.%.%.$%...%.%%.$%.%%%.%%.$%%%%%%%%.$%%%%%%%%.$%%%.%%%%. . .@@#@.@##@.###@.@@#@.####.@##@.####.@##@.@##@.@##@.@@@.+ ", +" $..%..%.%.$%%.%.%%%.$%.%%%.%%.$%%%%%%%%.$%.....%%.$%.....%%. . .@##@.#@@#.@@@#.#@#@.#@@@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", +" $..%.%..%.$%%%.%%%%.$%.%%%.%%.$%%%..%%%.$%%%%%%%%.$%%%.%%%%. . .@@#@.@@@#.@@@#.#@#@.###@.#@@@.@@@#.#@@#.#@@#.#@@#.@@@.+ ", +" $.%.%%%.%.$%%.%%%%%.$%.%%%.%%.$%%%..%%%.$%.....%%.$%%%.%%%%. . .@@#@.@@#@.@##@.#@#@.@@@#@###@.@@#@.@##@.@###.#@@#.###.+ ", +" $.%%%%.%%.$%.%%...%.$%%...%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@#@.@#@@.@@@#.####.@@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", +" $%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%.$%%%%%%%%. . .@@#@.#@@@.@@@#.@@#@.#@@#@#@@#.@#@@.#@@#.@@@#.#@@#.@@@.+ ", +" %.........%.........%.........%.........%.........%......... . .@###.####.###@.@@#@.@##..@##@.@#@@.@##@.@##@.@##@.@@@.+ ", +" . .......................................................+ ", +" . .......................................................+ ", +"................................................................. ", +" ", +" ............................................................. ", +" .@@@@@.@###@.@@#@@.@###@.#####.@@@#@.#####.@@##@.#####.@###@. ............................................................. ", +" .@@@@@.#@@@#.@##@@.#@@@#.@@@#@.@@##@.#@@@@.@#@@@.@@@@#.#@@@#. ............................................................. ", +" .@@@@@.#@@@#.@@#@@.@@@@#.@@#@@.@#@#@.####@.#@@@@.@@@#@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.#@@@#.@@#@@.@@@#@.@@@#@.#@@#@.@@@@#.####@.@@#@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.#@@@#.@@#@@.@@#@@.@@@@#.#####.@@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@##@.#@@@#.@@#@@.@#@@@.#@@@#.@@@#@.#@@@#.#@@@#.@#@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@##@.@###@.@###@.#####.@###@.@@@#@.@###@.@###@.@#@@@.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@###@.@@@@@.@###@.####@.@###@.####@.#####.#####.@###@.#@@@#. ............................................................. ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .#@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@@.#@@@#. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@####.#####.#####.####@.#@@@@.#@@@#.####@.####@.#@###.#####. ............................................................. ", +" .@@@@#.@@@@@.#@@@#.#@@@#.#@@@@.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ", +" .@@@#@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@@.#@@@@.#@@@#.#@@@#. ............................................................. ", +" .@##@@.@@@@@.#@@@#.####@.@###@.####@.#####.#@@@@.@####.#@@@#. .....................................................@#@.@#@. ", +" ............................................................. .@@#@@.@@@@@.@@##@.@###@.@###@.@###@.@###@.@###@.....##@.#@#. ", +" ............................................................. .@##@@.@@@@@.@#@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.###.@#@.@##. ", +" .@###@.@@###.#@@@#.#@@@@.#@@@#.#@@@#.@@#@@.####@.@###@.####@. .@@#@@.@@@@@.#@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....@#@.@@#. ", +" .@@#@@.@@@#@.#@@#@.#@@@@.##@##.#@@@#.@#@#@.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.####@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.....###.@#@. ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@#@#.##@@#.#@@@#.#@@@#.#@@@#.#@@@#. .@@#@@.@@@@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#...........&& ", +" .@@#@@.@@@#@.##@@@.#@@@@.#@#@#.#@#@#.#@@@#.####@.#@@@#.####@. .@@#@@.@@##@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@###@@###@& ", +" .@@#@@.@@@#@.#@#@@.#@@@@.#@@@#.#@@##.#@@@#.#@@@@.#@#@#.#@#@@. .@###@.@@##@.@###@.@###@.@###@.@###@.@###@.@###@.@#@@@@#@@@@. ", +" .@@#@@.#@@#@.#@@#@.#@@@@.#@@@#.#@@@#.@#@#@.#@@@@.#@@#@.#@@#@. .................................................@@##@@#@@@@. ", +" .@###@.@##@@.#@@@#.#####.#@@@#.#@@@#.@@#@@.#@@@@.@##@#.#@@@#. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@@@@#@#@@@@. ", +" ............................................................. .#####.@@@@@.#####.@@@@@.#####.#####.@@@@@.@@@@@.@###@@@###@. ", +" ............................................................. ............................................................. ", +" .@###@.#####.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.#####.@@@@@.@@#@@. ", +" .#@@@#.@@#@@.#@@@#.#@@@#.#@@@#.#@@@#.#@@@#.@@@@#.@@@@@.@@@@@. ............................................................. ", +" .#@@@@.@@#@@.#@@@#.#@@@#.#@@@#.@#@#@.#@@@#.@@@#@.@####.@##@@. .....................................................@@@.@@@. ", +" .@###@.@@#@@.#@@@#.#@@@#.#@#@#.@@#@@.@#@#@.@@#@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" .@@@@#.@@#@@.#@@@#.#@@@#.#@#@#.@#@#@.@@#@@.@#@@@.@###@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@.@@@.@@@. ", +" .#@@@#.@@#@@.#@@@#.@#@#@.#@#@#.#@@@#.@@#@@.#@@@@.@#@@@.@@#@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" .@###@.@@#@@.@###@.@@#@@.@#@#@.#@@@#.@@#@@.#####.@####.@###@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.....@@@.@@@. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@............. ", +" ............................................................. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@#@@.@@#@@.@##@@.@##@@.@#@#@.@###@.@@#@@.@###@.@@#@@.@@#@@. .................................................@@@@@@@@@@@. ", +" .@@#@@.@##@@.@@@#@.@@@#@.@#@#@.@#@@@.@#@@@.@@@#@.@#@#@.@#@#@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .#####.@@#@@.@@#@@.@@#@@.@###@.@##@@.@##@@.@@#@@.@@#@@.@@##@. .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@@@@@@@. ", +" .@@#@@.@@#@@.@#@@@.@@@#@.@@@#@.@@@#@.@#@#@.@@#@@.@#@#@.@@@#@. ............................................................. ", +" .@@#@@.@###@.@###@.@##@@.@@@#@.@##@@.@@#@@.@@#@@.@@#@@.@@#@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@###@@###@ @####@#@@@@ @####@#@@#@ @@@@@@@@@@@ ", +" ............................................................. @#@@@@#@@@@ @#@@@@#@@@@ @#@@@@##@#@ @@@@@@@@@@@ ", +" ............................................................. @@##@@#@@@@ @###@@#@@@@ @###@@####@ @@@@@@@@@@@ ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @@@@#@#@@@@ @#@@@@#@@@@ @#@@@@#@##@ @@@@@@@@@@@ ", +" .@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. @###@@@###@ @#@@@@####@ @####@#@@#@ @@@@@@@@@@@ ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@#@#@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@#@@.@@#@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" .@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@.@@@@@. ", +" ............................................................. "}; diff --git a/wmcalc/wmcalc_c.h b/wmcalc/wmcalc_c.h new file mode 100644 index 0000000..6481d14 --- /dev/null +++ b/wmcalc/wmcalc_c.h @@ -0,0 +1,38 @@ +/* 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 "/etc/wmcalc.conf" +#define VER 0 +#define REL 3 + +#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 diff --git a/wmcalc/wmcalc_err.h b/wmcalc/wmcalc_err.h new file mode 100644 index 0000000..79076ce --- /dev/null +++ b/wmcalc/wmcalc_err.h @@ -0,0 +1,31 @@ +/* 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 diff --git a/wmcalc/wmcalc_f.h b/wmcalc/wmcalc_f.h new file mode 100644 index 0000000..64d127e --- /dev/null +++ b/wmcalc/wmcalc_f.h @@ -0,0 +1,80 @@ +/* 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 diff --git a/wmcalc/wmcalc_g.h b/wmcalc/wmcalc_g.h new file mode 100644 index 0000000..f4b939a --- /dev/null +++ b/wmcalc/wmcalc_g.h @@ -0,0 +1,73 @@ +/* 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 diff --git a/wmcalc/wmcalc_t.h b/wmcalc/wmcalc_t.h new file mode 100644 index 0000000..6ae53e2 --- /dev/null +++ b/wmcalc/wmcalc_t.h @@ -0,0 +1,54 @@ +/* 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 diff --git a/wmcalc/wmcalc_x.h b/wmcalc/wmcalc_x.h new file mode 100644 index 0000000..f2d5e09 --- /dev/null +++ b/wmcalc/wmcalc_x.h @@ -0,0 +1,30 @@ +/**************************************************************** + * 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 diff --git a/wmcalc/wmcalcfunc.c b/wmcalc/wmcalcfunc.c new file mode 100644 index 0000000..17f9518 --- /dev/null +++ b/wmcalc/wmcalcfunc.c @@ -0,0 +1,525 @@ +/**************************************************************** + * 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 + + ****************************************************************/ + +/***** 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.5g", RegisterA); + break; + case '-': + RegisterA = RegisterB - RegisterA; + sprintf(DispString, "%10.5g", RegisterA); + break; + case '*': + RegisterA = RegisterB * RegisterA; + sprintf(DispString, "%10.5g", RegisterA); + break; + case '/': + RegisterA = RegisterB / RegisterA; + sprintf(DispString, "%10.5g", 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); + + system(SysCalcCmd); +} /***** End of function startcalc *****************************/ diff --git a/wmcalc/wmcalcscr.xpm b/wmcalc/wmcalcscr.xpm new file mode 100644 index 0000000..ed4e94a --- /dev/null +++ b/wmcalc/wmcalcscr.xpm @@ -0,0 +1,128 @@ +/* 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+|(V~j$ucsIJKoxyW6h4leOP9f5drzSf9`PdEfVWpXYhM%hTIqqiYlw zanTe)6dfc*5fp_}6h={q&Pb9X35vui5~D~&7YULg2#UZd0;32-_u?dl6BLe9I7Z=! z9>qusBPa}~FpR;)o^%y%<4aIEi5-hJYiCl87J?P9ls%uoYMX7?1{*KnrTH7_b2v zuwWR`g6JFqCkTun5Umf^LWbi6juAMbPjVSOXZ4hDo3WJYX?k12m#fM0Z0OatH($10z8n ztc46i^y8p?Ro|N~s!vGUtiB4}t2UZ;UF{t`s+-{SyE0ALg9Cf7EUvV_$4q48zmge>-CSp{1b*TJ3-p{3Be1bmowT&N8nHXKx(Q zF=o5(U(_u=Zm`nlj92Tq-hAVE8^Qy6eSZ4Eig)alP01>6j!lp>{LaNX6E45wxvRldnl2h^F!Tf?g1yw4iANNSQdIIZoEI_rAof@rubRs zxd}yh%wXh^_HP7E!ua#gQm>56JnZ<_`6~Y(;}ZojhXyrq&i=h)@xq4Aqh-E(+jXk(_10#L)i?9!i_I9B%lvvuUgIH-{K>fQ--TRESGY04mz^298ZdIu z;FQZhbYm(PSTask7->YTCV2l`l~xgA5iaGGc4ZU{`F$BnspW4NNDC=UQrRg>I=`ec zWKL<_|1sYDq4~^wciG;miEW%I<=4J==hl8xyZ5Ggm+!{UHH!pUj#aX`tj3Ys=?A&; zH&)-Z_q@JSSy4@i{aXozW511Ty1KwFI@4yRs6C;k()Nj5>?`aO`S{sNz3(PeccL& z`%{v7zg9(M*}wPo`!(UxmW}6IF1_`&^mn@WX5Or|$MwRNtrQKHBmIYaQ>8vb zI#UvtYyByFiyABEclJ$xABZQ$#y8B4wC)wg1(|&#m~<|2SU0mR$a2&qdhMs8ERCjY zJoSEEo6DB*L<3~a@HsD-|J`wiR~E7VTOKmmx5luA`VS(d`a(^@wB+qUwc5xIr)tt|zM4VWjr z#@z06PWBEaTI3IRdz7!^Y|_dXwAEw=x0{$&4rWepjv5-aAAi^Q=AgFsj#a;u_ijyp z8}lyz(X4Z9G1E2>zkNl}(WNa*j!G>2@@0vtqWpUI#G6=Y+C!#K$_1nD+_-{F%i2R; zt;Usavpa{L4Ct@l)OaQ~tnRAE_4@nkQCTXB?N@FdVY8|A&b{rI1EZVMe)44)*$Sy6 zkBHh~yIZGnDlCI0!ft^g*j}EqU8D@1 zs@DsUgnqOQzdw)s)-(8Qy|-lNS2kmbxel-B`^KF?rKUmb_S(*r?Rh#{te<1WJk@EF r^t&96!42_f>tu^)QPWNh&cYreXN#sHZ6`rg!3xEP)+k*a^tZnN_4|j6 literal 0 HcmV?d00001 diff --git a/wmcalc/wmcalcscr2.xpm b/wmcalc/wmcalcscr2.xpm new file mode 100644 index 0000000..09332e7 --- /dev/null +++ b/wmcalc/wmcalcscr2.xpm @@ -0,0 +1,128 @@ +/* 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?h=6dBB0UDY z2r4KNY7i+K2@q=N2vVeplEsI6&c5!<%bfYQuyb*8azde8r(l9SFm7&`D8B$)P*O}WThLPkMDSw>DxUP9u``Lk;0klNbX z(#raVdME=8Ep60q5fBs#g>l0~cz8rmvJ$eW|GQWp06s1N4WJ<)IRMNDg7AS@6hIsR zz!1>yxc?M8Cxndy3<6F-U0whT27@4Ab`S>}=kEg$7{bQR#}9DG3LrTJHsK-f%Vk$-OT#|ehC zm$1eG*a>{Hoplhg< zxnR29vHBXA8CQP90{&W-<|&=Y=yt)a`6f)Q6MEurQC+i~M;}JGDoUAT8XcE1GiLmw zmmQuU!=;|N4b%Cc`j-^WbvCvqp}I^@CvUzmyC%*?43i8#l(BfoOz4l9v{~YyfP;gL zjz0QGKhkFbch3SFIUjw3fSb(+BB!&eDH~M4@+^z+H-U8&Y?Bp$iZ>?q9lMel+_Sr?F(_ zY*DA8eKaFQ;Xast_Uo;b#qRsAADKTLHjtVS*X}{-r+;5hOuk{%x-~_67lg;ILGpU- za%tC`ZYG-h$77vD{X@-VTa=iYPo|C+M<;$xRMTsp(;Gt;iHaI>2J=x17^xd)(lL&E z^5&5?I)913=&SWRTp5}EG_uIZ#|8fjca$~)ZBxI;OHx=Yf9!I&?G$0Qf`yq%SH_h# zaBddQN7X&~#yIxp!3zhtkPs>1ke5WIIXmIZ(uY4DXQpb09d6#mxMXLCb5Ism{c+{!KQ~Bsv5}!njiOppo=TlrmMrW z#{NhUX-M`Lq#rhHIVSkqN#tu5yM%jbI6kltAHz((ydS36EcKbPW~=xX;lfn@<@QrQ zgI2Zv$rZl=chD%05*^P=qIxaSs+|qtc4apjr!LO-{Y@h*Mh0TXVB+cjY1(o(57Au2 zcghh85IPR_2FuOgtY(v22uWJ9u+GOvGGb23$#Wv|`*%EG8cLLN_Jx?ln#`WQUE5bu zhPj@-5s>zQA#WoVfF4e2@etcX^&)W00mDap1F(-Oo;Tk;*R@c3X(VMv>So}L(Br?d zg^U|x{7|2DQe*CQeRv_(1tyyU7&5P7uh-GlUba|ZknlGtw+G|gtU&S*=co0kog-0I zqeAjjwaz2NaYkhslo+eM2Mzyv0Ac8c?pF$@3#P41?+PrK-=9zHM{>?}5Cen_;8|3R zS5Qe)X*mYYKzZ~p5MSv-5HCEf+WgAuT+uf+gKaAuc1ku}mJf=>GZGp^XmvSMmCuP! zYxHhMk$7{fX5#hqB-bsD{{kQE)8+J9pxdICh6xFNj#&v+t!%1V?B3tAyEn<~dC`K< z`5mt38xmhEr?}trkNU`lzOGTJ39;p`y}Wgxbs1E*w$)ZS zDPXMb5nar?o#T&jpD%{{7`oujRuC&M7!}4IOvk6f$zp4-OLEFHx`&I@uILD;+F3hz zDdn14^)NKrTqF4@no1Wg%=cgIUHw#6wPpF0B$YyRJex+@0Zgbo3xM1F5jWIvAo-07; z_4Kei(VcIHbKTU8%odpC>aG=fkDhz>4n1Z+j6v8H=SuI092=E5J00zf-eG3*g;87x z{?{$K-JHFBZ}RZws9J(0d1oVwUt;)%J2c~+2Y+xV6U3K&>az%wwa=ctr@(AJe zW|GzCbC?aBwE3_pxhB&#ivnj6KX-EO!h>`RSN3A3PCtdm&9w*&|dNL?HSa-CngwymwHOEGjD8` z9GM^Poy(eyJbilyyR3y$<%4>&=U|5vg3O|}m=z3rPuZRVs`H!v&Zo_-1_hX=DHd?0 z$|`bGr-bP?xN?yJHgCTtn=3kt@*!FBN8~HdeH5~DjFta0ZU{16ect@btL0*W29hEv z=VAw4-Sf7g>_GiQz^Q}%ZLZ^((>1rPv%8peKF2Bm21R;Dxb2MwA%^;|ccj zs)1B3Kghi{f7k`8a{WwE;WE#yC}BHg$am`5J8C98Vn@DdymENRDwB=5T)r8IEw7+GyQmA2Z@eZH@1)~z5P-1oHaYAZaW zoVgwOjM%ZTJQuC`>NpC2d2wZ^igWPOfOA{~DK@NCTDjZO>}e-_r}*FaHvG<7MvLfXaSlQGUhyh#FG4S0-HSSnF47eC#c + * + * 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 *sepstr = NULL; + char sep_ch = '\t'; + char *cfg_var_ptr = NULL; + + + sepstr = &sep_ch; + + 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 **************************/