*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 0003 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. 0007 0008 This software is distributed under the terms of the GNU GPL v2. 0009 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 0016 0017 Type away, and press Enter to see the result. 0018 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. 0022 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. 0031 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! :) 0065 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. 0084 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. 0088 0089 v0.80.1 fixed an issue with the configure script for people who don't already 0090 have scons installed. 0091 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. 0104 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. 0112 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. 0139 0140 Major changes since 0.61: 0141 * User defined Functions. 0142 * Save state of program between runs. 0143 * Miscellaneous fun stuff. 0144 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. 0183 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.