abakus, by Michael Pyne Version: 0.91 This is my attempt at creating a light-calculator based on Roberto Alsina's initial usability suggestions, and based on the ideas of a few other KDE hackers. This software is distributed under the terms of the GNU GPL v2. Synopsis: $ tar xvjf abakus-0.91.tar.bz2 $ cd abakus-0.91 $ ./configure && make && make install $ abakus Type away, and press Enter to see the result. Changes since 0.90: * Add ability to remove all functions and variables to the context menus of their respective list boxes. * Convert out-of-range numbers to NaN. * Accept "," as a decimal separator for the benefit of European users. * Use correct decimal separator (per TDELocale settings) in output. * For long results, show the beginning instead of the end of the result, since the beginning is the most significant part of the result. Changes since 0.85: * You now have the option of using the GNU Multiple Precision library for high-precision mathematics. It requires the MPFR library to also be installed (normally comes with GNU MP 4.x). It is used automatically if detected. * Jes Hall has contributed DocBook documentation to make Abakus integrate into KDE even more tightly. Thanks, Jes! * User defined functions can now be defined over. * Error handling with deriv() function improved. * Ariya Hidayat's name was misspelled everywhere in Abakus. Sorry, Ariya. :( * Speaking of Ariya, Abakus now uses the impressive user interface code from his SpeedCrunch calculator (http://speedcrunch.berlios.de/). This includes the Calc-as-you-Type tooltip, the function and variable dropdown, and syntax highlighting. It's not configurable at this point, expect that in the next release. * You can use the F6 key to select the expression editor if you're a big fan of the keyboard. * Raising negative numbers to integral powers should work with the internal high-precision library now. * You can no longer deselect the current precision menu item. * Fix crash bug when a user-defined function refers to another user-defined function, and then you remove or edit the function it referred to. * Add exact numerical derivatives for all functions supported. * Added the asinh, acosh, and atanh functions. * Fixed bug with loading of prior compact mode status. * Fixed bug where result text had wrong precision when you changed the precision and tried drag-and-drop. * Drag-and-drop improvements. * Fixed bug where Custom Precision menu entry was checked even if you canceled the dialog. * Made hyperbolic functions consistently ignore trigonometric mode. (Both Degrees and Radians make no sense for hyperbolic trig). * Whew! :) v0.85 adds a lot: * Improvements to the configure script. Since I didn't end up using libCLN it was mostly for naught, but the changes will be useful for the future. * abakus now uses the high-precision math routines from Ariya Hidayat's SpeedCrunch program. Thanks, Ariya! * High precision arithmetic can have between 0 and 75 digits of precision. * Support for approximate derivatives. For most functions the derivatives will be numerically accurate. For those functions where I didn't feel like typing in the exact form of the derivative an approximation is used instead. * Implicit multiplication has been added to the parser. That means you can type stuff like "3 sin pi" without having to manually add the * in between 3 and sin. This also works with numbers and variables, and numbers and parenthesized expressions. * GUI changes. The main result view now uses TDEListView, so it gains tooltip support for long answers for free, along with a bevy of other improvements. * You can right-click on an answer and copy it to the clipboard. * Corrected information in the about box. * Restarting abakus with compact mode enabled should is much improved. v0.80.2 fixed an issue with the configure script for people who don't have exactly the same version of Python I do, and forcibly prevents flex/bison errors. v0.80.1 fixed an issue with the configure script for people who don't already have scons installed. Major changes since 0.76: * There is no more C code to interface between the parser and program. * RPN mode is improved. Now the stack is retained between calls, and there are a few commands only in RPN mode: 1. pop - Return the top of the stack. 2. clear - Clear the stack. * bksys is used instead of the custom Makefiles. * Lots of code cleanups, including license headers. * The nifty drag-and-drop image looks more rectangular, and is used with the two listviews on the right as well. * Improved error checking, with messages that should hopefully be more descriptive. Major changes since 0.75: * Reorder internal macro so that functions are declared *before* they're referenced, which helps build the program on systems with math.h files that don't export the long double version of their math functions. * Hitting a number or letter key right after evaluating an expression in RPN mode automatically prepends the 'ans' variable, which was a feature of the Normal mode. Major changes since 0.70: * Build system switched (somehow) to using qmake. The parser and lexer are still included, so bison and flex are still not required. Hopefully this will improve the ease of building. Of course, this means no more colored make output. * Changed most of the keyboard shortcuts to use Shift + Alt + foo instead of Alt + foo since that was interfering with the menu bar. * RPN mode!! If you enable RPN mode, then your expressions will be evaluated using the Reverse Polish Notation popular with users of HP calculators. Note that although you can use values and functions while in RPN mode, you cannot set or remove them from the expression editor like you can in normal mode. * abakus will display a small token starting with a dollar sign ($) in italics next to results. You can use these tokens to quickly reference a result in your expression. The most recent result is always $0, with the number increasing from most recent to least recent result. For example, typing 2 3 $0 ^ $1 would give a result of 9. * You can right click on functions and values in the list views to remove them from the GUI. * Changed the result items to use word wrapping when needed to fit all the text. * Very small DCOP interface. * More code cleanup. * Added a .desktop file. * Test client removed again. * Double-clicking on an error message (or OK message) no longer inserts them into the edit box. Major changes since 0.61: * User defined Functions. * Save state of program between runs. * Miscellaneous fun stuff. Currently implemented features: * Parser built using flex and bison. The generated files are included so it should compile fine for you. * Fully C++. The parser and lexer code require C++ to compile. * Supports several built-in functions: - sin, cos, tan, sinh, cosh, tanh, asin, acos, atan in either radian or degree mode. abs, exp (e raised to the given power), ln, log (base 10), sqrt, ceil, floor * Supported operators: +, -, *, /, ^ (or **). * Includes a window showing the values and user-defined functions you have. * Predefined constants: pi, and e (Euler' constant). * You can assign to variables by using an expression of the form: identifier = expression. You can then reuse these variables later. * You can create user-defined functions of one variable using the syntax set foo(var) = , where calculates the value in terms of var. * You can delete user-defined variables by doing: remove var * You can delete user-defined functions by doing: remove foo(). Notice that the variable is NOT included in that expression. * Functions and variables are saved on exit, and then loaded when abakus is started again. * The ans variable contains the result of the last computation. * Pressing +, -, *, or / immediately after your last computation automatically inserts ans for you, saving you typing. * A compact mode for the program. * Operator precedence should be correct, including the right association of the power operator. So, 2 ^ 3 ^ 2 == 512, just as it does when you write it out. You can use parentheses to force precedence. * Parentheses are not required around functions. So, sin 3 is a valid expression. Note that sin 3 + cos 4 translates internally as (sin 3) + (cos 4), not as sin (3 + cos (4)). * I took some pains to try to make things like 3 + -2 work right. * inf and nan are accepted as numeric input for completeness. * abakus will automatically add ) characters to the end of the expression as needed to balance your expression. This means that expressions like sin (cos (2 + 3 will evaluate with no error. * A rudimentary RPN mode is included. Most everything works, except for derivatives and creating functions or new variables. Bugs: * More functions would be nice. * The lexer assumes that the decimal marker is a period. (.) I'm not exactly sure how to cleanly solve this problem with flex. :-( * Documentation could be better.