Warning, /utilities/abakus/README is written in an unsupported language. File is not indexed.

0001 abakus, by Michael Pyne <michael.pyne@kdemail.net>
0002 Version: 0.92
0004 This is my attempt at creating a light-calculator based on Roberto Alsina's
0005 initial usability suggestions, and based on the ideas of a few other KDE
0006 hackers.
0008 This software is distributed under the terms of the GNU GPL v2.
0010 Synopsis:
0011  $ tar xvjf abakus-0.91.tar.bz2
0012  $ cd abakus-0.91
0013  $ mkdir build && cd build
0014  $ cmake -DCMAKE_INSTALL_PREFIX=/path/to/kde ../ && make && make install
0015  $ abakus
0017 Type away, and press Enter to see the result.
0019 Changes since 0.91:
0020 * (Almost) everything is broken, it crashes quite a bit, it looks worse, lots of
0021   previously working features are disabled, but it compiles and runs under KDE 4 now.
0023 Changes since 0.90:
0024 * Add ability to remove all functions and variables to the context menus of
0025   their respective list boxes.
0026 * Convert out-of-range numbers to NaN.
0027 * Accept "," as a decimal separator for the benefit of European users.
0028 * Use correct decimal separator (per KLocale settings) in output.
0029 * For long results, show the beginning instead of the end of the result,
0030   since the beginning is the most significant part of the result.
0032 Changes since 0.85:
0033 * You now have the option of using the GNU Multiple Precision library for
0034   high-precision mathematics.  It requires the MPFR library to also be
0035   installed (normally comes with GNU MP 4.x).  It is used automatically if
0036   detected.
0037 * Jes Hall has contributed DocBook documentation to make Abakus integrate into
0038   KDE even more tightly.  Thanks, Jes!
0039 * User defined functions can now be defined over.
0040 * Error handling with deriv() function improved.
0041 * Ariya Hidayat's name was misspelled everywhere in Abakus.  Sorry, Ariya. :(
0042 * Speaking of Ariya, Abakus now uses the impressive user interface code from
0043   his SpeedCrunch calculator (http://speedcrunch.berlios.de/).  This includes
0044   the Calc-as-you-Type tooltip, the function and variable dropdown, and
0045   syntax highlighting.  It's not configurable at this point, expect that in
0046   the next release.
0047 * You can use the F6 key to select the expression editor if you're a big fan
0048   of the keyboard.
0049 * Raising negative numbers to integral powers should work with the internal
0050   high-precision library now.
0051 * You can no longer deselect the current precision menu item.
0052 * Fix crash bug when a user-defined function refers to another user-defined
0053   function, and then you remove or edit the function it referred to.
0054 * Add exact numerical derivatives for all functions supported.
0055 * Added the asinh, acosh, and atanh functions.
0056 * Fixed bug with loading of prior compact mode status.
0057 * Fixed bug where result text had wrong precision when you changed the
0058   precision and tried drag-and-drop.
0059 * Drag-and-drop improvements.
0060 * Fixed bug where Custom Precision menu entry was checked even if you canceled
0061   the dialog.
0062 * Made hyperbolic functions consistently ignore trigonometric mode.  (Both
0063   Degrees and Radians make no sense for hyperbolic trig).
0064 * Whew! :)
0066 v0.85 adds a lot:
0067 * Improvements to the configure script.  Since I didn't end up using libCLN it
0068   was mostly for naught, but the changes will be useful for the future.
0069 * abakus now uses the high-precision math routines from Ariya Hidayat's
0070   SpeedCrunch program.  Thanks, Ariya!
0071 * High precision arithmetic can have between 0 and 75 digits of precision.
0072 * Support for approximate derivatives.  For most functions the derivatives will
0073   be numerically accurate.  For those functions where I didn't feel like typing
0074   in the exact form of the derivative an approximation is used instead.
0075 * Implicit multiplication has been added to the parser.  That means you can
0076   type stuff like "3 sin pi" without having to manually add the * in between
0077   3 and sin.  This also works with numbers and variables, and numbers and
0078   parenthesized expressions.
0079 * GUI changes.  The main result view now uses KListView, so it gains tooltip
0080   support for long answers for free, along with a bevy of other improvements.
0081 * You can right-click on an answer and copy it to the clipboard.
0082 * Corrected information in the about box.
0083 * Restarting abakus with compact mode enabled should is much improved.
0085 v0.80.2 fixed an issue with the configure script for people who don't have
0086 exactly the same version of Python I do, and forcibly prevents flex/bison
0087 errors.
0089 v0.80.1 fixed an issue with the configure script for people who don't already
0090 have scons installed.
0092 Major changes since 0.76:
0093 * There is no more C code to interface between the parser and program.
0094 * RPN mode is improved.  Now the stack is retained between calls, and there
0095   are a few commands only in RPN mode:
0096     1. pop   - Return the top of the stack.
0097     2. clear - Clear the stack.
0098 * bksys is used instead of the custom Makefiles.
0099 * Lots of code cleanups, including license headers.
0100 * The nifty drag-and-drop image looks more rectangular, and is used with the
0101   two listviews on the right as well.
0102 * Improved error checking, with messages that should hopefully be more
0103   descriptive.
0105 Major changes since 0.75:
0106 * Reorder internal macro so that functions are declared *before* they're
0107   referenced, which helps build the program on systems with math.h files that
0108   don't export the long double version of their math functions.
0109 * Hitting a number or letter key right after evaluating an expression in RPN
0110   mode automatically prepends the 'ans' variable, which was a feature of the
0111   Normal mode.
0113 Major changes since 0.70:
0114 * Build system switched (somehow) to using qmake.  The parser and lexer are
0115   still included, so bison and flex are still not required.  Hopefully this
0116   will improve the ease of building.  Of course, this means no more colored
0117   make output.
0118 * Changed most of the keyboard shortcuts to use Shift + Alt + foo instead of
0119   Alt + foo since that was interfering with the menu bar.
0120 * RPN mode!!  If you enable RPN mode, then your expressions will be evaluated
0121   using the Reverse Polish Notation popular with users of HP calculators.  Note
0122   that although you can use values and functions while in RPN mode, you cannot
0123   set or remove them from the expression editor like you can in normal mode.
0124 * abakus will display a small token starting with a dollar sign ($) in italics
0125   next to results.  You can use these tokens to quickly reference a result in
0126   your expression.  The most recent result is always $0, with the number
0127   increasing from most recent to least recent result.  For example, typing
0128   2 <Enter> 3 <Enter> $0 ^ $1 <Enter> would give a result of 9.
0129 * You can right click on functions and values in the list views to remove them
0130   from the GUI.
0131 * Changed the result items to use word wrapping when needed to fit all the
0132   text.
0133 * Very small DCOP interface.
0134 * More code cleanup.
0135 * Added a .desktop file.
0136 * Test client removed again.
0137 * Double-clicking on an error message (or OK message) no longer inserts them
0138   into the edit box.
0140 Major changes since 0.61:
0141 * User defined Functions.
0142 * Save state of program between runs.
0143 * Miscellaneous fun stuff.
0145 Currently implemented features:
0146 * Parser built using flex and bison.  The generated files are included so it
0147   should compile fine for you.
0148 * Fully C++.  The parser and lexer code require C++ to compile.
0149 * Supports several built-in functions:
0150    - sin, cos, tan, sinh, cosh, tanh, asin, acos, atan in either radian or
0151          degree mode.
0152      abs, exp (e raised to the given power), ln, log (base 10),
0153      sqrt, ceil, floor
0154 * Supported operators: +, -, *, /, ^ (or **).
0155 * Includes a window showing the values and user-defined functions you have.
0156 * Predefined constants: pi, and e (Euler' constant).
0157 * You can assign to variables by using an expression of the form:
0158   identifier = expression.  You can then reuse these variables later.
0159 * You can create user-defined functions of one variable using the syntax
0160   set foo(var) = <expr>, where <expr> calculates the value in terms of var.
0161 * You can delete user-defined variables by doing: remove var
0162 * You can delete user-defined functions by doing: remove foo().  Notice that
0163   the variable is NOT included in that expression.
0164 * Functions and variables are saved on exit, and then loaded when abakus is
0165   started again.
0166 * The ans variable contains the result of the last computation.
0167 * Pressing +, -, *, or / immediately after your last computation automatically
0168   inserts ans for you, saving you typing.
0169 * A compact mode for the program.
0170 * Operator precedence should be correct, including the right association of
0171   the power operator.  So, 2 ^ 3 ^ 2 == 512, just as it does when you write
0172   it out.  You can use parentheses to force precedence.
0173 * Parentheses are not required around functions.  So, sin 3 is a valid
0174   expression.  Note that sin 3 + cos 4 translates internally as (sin 3) + 
0175   (cos 4), not as sin (3 + cos (4)).
0176 * I took some pains to try to make things like 3 + -2 work right.
0177 * inf and nan are accepted as numeric input for completeness.
0178 * abakus will automatically add ) characters to the end of the expression as
0179   needed to balance your expression.  This means that expressions like
0180   sin (cos (2 + 3 will evaluate with no error.
0181 * A rudimentary RPN mode is included.  Most everything works, except for
0182   derivatives and creating functions or new variables.
0184 Bugs:
0185 * More functions would be nice.
0186 * The lexer assumes that the decimal marker is a period. (.)  I'm not exactly
0187   sure how to cleanly solve this problem with flex. :-(
0188 * Documentation could be better.