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.