New RPN is here: RPN 2.0 Alpha -- August 15, 2002
The source code is here (zip, 50 kB)
(not for the faint hearted).
Alpha release -- 08/15/2002 21:50:05 [fast and dirty preliminary documentation] What's new ========== Two prefix keys -- INV (Invert) and HPR (Hyper, the name 'hyp' doesn't fit on the button) Sometimes they really mean inverse and hyperbolic functions Much more functions implemented (see list below) Date/time operations, H:M:S representation, Modified Julian day, Weekday calculation, Moon phase Customizable unit conversions RPN reads memo RPN_cnfg (see sample, will be completed) Entering any numbers with just number and dot keys Memory cells m1 and m2 are mapped to all memory pull, their buttons are INV and HPR Of course, the "dll" (RPN_gear.rex) is also new. Holding HOME switches the power off but saves your "session". Keyboard functions ================== INV HYP INV+HYP --------------------------------------------------------- MX m1 <> x m2 <> x M+ m1 += x m2 += x MS m1 = x m2 = x MR x := m1 x := m2 / y / x GCD mod * y * x LCM par - y - x {x} cat + y + x [x] hyp +/- -x WkDay MnPhs sin etc. sin,cos,tan arc... sh,ch,th ar... ln ln(x) exp(x) lb(x) 2^x lg lg(x) 10^x ^ y^x log(x,y) ^2 x^2 sqrt(x) pi 3.1415... 1.6180... 0.5772... 299792.458 x|y x <> y rot down rot up 1/x 1/x n! nCr nPr >R Deg>Rad Rad>Deg >C °F>°C °C>°F MJD>Unix Unix>MJD ## Input »Hex »Time »Date/Time CE x = 0 clr.stk <-- del,drop ENT enter,dup Dat not implemented (yet?) Functions description ===================== (mainly, differences from 1.6) GCD greatest common divisor, x & y must be natural LCM least common multiplier, x & y must be natural sqrt square root of abs(x) {x} fractional part of x [x] integral part of x, floor(x) mod y mod x, numbers may be not integer, y - x * floor( y/x ) par parallel sum (or resistors, e.g.) x*y / (x+y) cat (hyper-diff) cathet, sqrt( y*y - x*x ), e.g. 13,12 or 12,13 --> 5 hyp (hyper-sum) hypotenuse, 333,444 --> 555 WkDay calculates week day for a MJD (see below) 0=Sun 1=Mon etc MnPhs Moon phase, age 0 to 29.5305886 days, +/- 0.6 days lb(x) log base 2 >C convert American degrees to normal (yes, it's here for fast access) >Unix convert MJD to Unix time (dates from 1.1.1970 to 1/19/2038) Input enter number from keyboard (see Input Formats below) »Hex show number as hexadecimal (0 to 68719476735) »Time Show x as hour:min:sec (or deg:min:sec) »D/T Show x as if it's MJD, show Month/Day/Year H:M:S pi pi, golden ratio, euler constant, light speed n! factorial, for integers 0..33 only nCr n!/((n-r)! * r!), n may be greater than 33 nPr n!/(n-r)!, n may be greater than 33 RotUp (top)x,y,z --> (top)z,x,y RotDn (top)x,y,z --> (top)y,z,x MJD === This is a date in form of Modified Julian Day. It differs from Julian Day by 2400000.5 (see http://tycho.usno.navy.mil/mjd.html) 0 MJD is 11/17/1858, 50000.04309 is 10/10/1995 01:02:03 Don't forget, if you add time (HMS) and date, divide time by 24! So, this allows you to perform any calculations with date and time! Entering numbers ================ You can enter any value with just digits 0-9 and dot. First time you press dot, a decimal dot is put. Second time it's 'e', and the third time it enters '-' in the exponent. 1 2 . 4 enters 12.4 1 2 . . 4 12.e4 i.e. 12e4 1 2 . . . 4 12.e-4 i.e. 12e-4 1 . 2 3 4 5 . 1 2 1.2345e12 1 . 2 3 4 5 . . 1 2 1.2345e-12 You can use backspace <-- to edit the number while entering it. Input Formats ============= Key ## will pop up the keyboard and allow you to enter any number forms including hexadecimal, times (or degrees with min and sec) and dates. '@' starts hexadecimal number, '/' indicates dates, colon ':' (or semicolon ';' in order not to switch keyboard) indicates HMS form. Time may follow date after one space. Compo- nents of date and time may be floating point numbers. I don't like to put here BNF, you'll catch it by examples: @100 256 @FeDcBa789 68414056329, same as @fedcba789 10:15 10 hours/deg 15 minutes, 10.25 10:15:30 10 deg 15 min 30 sec, 10.25833333 10;15;30 same 10;15.5 same 1;2;3 1:02:03 0;0;1.2345 3.429166667e-4, 1.2345 seconds ;;1.2345 same 1/1/1970 40587 (it's MJD) 01/01/1970 same 1/1/1970 12 40587.5 1/1/1970 12;00;00 same 1/1.5/1970 same 8/15 21;24 52501.89167 now :-) year 2002 default RPN_cnfg Format =============== # as the first character introduces comments Empty lines are allowed and ignored A line contains a one-char command, a blank, and a string or a number. A # comment may come after numbers. Commands are: c categories -- "main" convert menu, categories list u units -- "from" and "to" (2nd and 3rd level) menus n number -- well, a rate for a unit; may be floating point There may be up to 10 categories with up to 10 units each. A grave accent (`) splits a line for display. Conversion mode =============== Key cnv enters the unit conversion mode. It's a sequence of SuperCalc-like menus, of three levels -- Categories, From and To. You chose what you want with digits 0 to 9 and you can return to a previous level with <-- or cancel the conversion mode with CE or cvt. For example, if you have this RPN_cnfg # RPN conversion config file c 0:Money 1:Length u Money -- 0:Bucks 1:Euros n 1.0 n 0.9667 u Length -- 0:m`1:yard n 1 n 0.9144 #EOF Then 2 3 cvt 1 1 0 will convert 23 yards to meters (21.0312). Known Issues ============ No error checks, almost never! Neither in functions, nor in config reading. Please be careful yourself! Internationalization ==================== There exist version with ASCII (7 bit) characters on the keyboard There exist version with European (dd/mm/yyyy) dates input/output Ask me if you need these builds. Plans ===== Allow it to hide in Rex's Calc place Put access to memory cells 0..40 (or 0..100) to HYP-M keys instead of display touching Normal documentation Normal real life RPN_cnfg Exchange »Hex and »Time? No more functionality planned Contact =======
I'm sorry but sometimes the conversions in 1.6 may crash
and/or may lead to hiding all addins after exiting RPN.
Pin reset does help in this case.
You can have both versions here: RPN 1.5 and RPN 1.6
RPN Calculator Version 1.5 07/16/2002 (This is the first public release, so it's kinda beta. So please do expect fixes/changes soon. And I've had Rex for just a week!) This is a simple RPN (Reverse Polish Notation) calculator. (RPN means it's stack-based and you first enter numbers on the stack and then operate on them. So, in order to add 3 to 20 you first enter 3, then enter 20, then order: add!) It has a stack of three numbers, 2 memory cells, 40 storage cells, 40 unit conversions, all usual math operations, 11 or 12 decimal digits precision (exponent -38 to +38), input and display in hexadecimal notation. Error detection and report is rather primitive because of memory limitations. The calculator uses math functions from a separate math library addin (provided). The upper pane is "display". It shows the stack on the left (z, y, and x. x is the top of the stack, but as it usual in computer science, is at the bottom. And the trees grow usually upside down. The top is in bold) and two memory cells on the right, if they are not empty. Also the right part is used to show hex/char representation and messages. The active elements are 40 buttons and the "display" -- use its left half to store a number and the right part to recall. (Think of it as "get from stack", which is on the left, and "get from memory" which cells are on the right) To exit, press any hard button or any application icon. The "modes" of work are: * entering numbers with buttons 0 to 9 and . (dot) Sorry, no exponent and/or sign and/or rational numbers entering yet * performing normal function, which is shown on the buttons * performing inverse (or additional) function, which are not shown, but are quite obvious and are easy to memorize * entering hexadecimal number -- the standard keyboard is used * performing direct or inverse unit conversion -- the keyboard layout will show the units. * storing/recalling numbers in "big" memory. The calculator has ASCII and "Native Rex" versions. ASCII uses only characters with codes less than 128 and must be used if you burned other language font in the upper part of fonttable. To store/recall numbers Tap on the left or right part of the display and then on any button (40 memory cells!). If you changed your mind and don't want to store/recall the number, just tap on the display again. The keys and their functions are: inv turns on and off the "inverse" mode cvt turns on and off the conversion mode and switches the keyboard. These both modes can be used together and in any order. 0-9 well, I won't explain it, should I? . that's a bit more tricky, but you'll manage it too AC clear the stack CE clear the input <-- delete last character when entering, or drop the top number from the stack ENT separate numbers when entering, or duplicate the top The other keys have different meaning in different modes. Again, x is the top of the stack. NORMAL INVERSE MX exchange x and m1 exchange x and m2 M+ add x to m1 add x to m2 MS store x to m1 store x to m2 MR recall m1 to the stack recall m2 to the stack + add two numbers, x and y integral part, [x] - subtract x from y fractional ppart, {x} * multiply x by y sign of x, i.e. -1, 0, 1 / divide y by x y modulo x, 3.1 mod 2 = 1.1 +/- change sign absolute value sin sine, argument in radians hyperbolic sine, sh cos cosine hyperbolic cosine, ch tan tangent hyperbolic tangent, th atn arctangent hypotenuse: sqrt(x*x + y*y) ln natural logarithm exponent, exp(x) log base-10 logarithm 10 raised to a power x ^ power, y^x root, y^(1/x) ^2 square, x^2 square root, sqrt(x) pi 3.1415926535897932,,, 1.6180339887498948482... x|y swap x and y rotate the stack down 1/x reciprocal value factorial (up to 33!) >R convert deg. to rad. convert rad. to deg. >C convert *F to *C convert *C to *F HX show as hex and char enter as hexadecimal In the conversion mode, the direct convertion is to SI, and the inverse conversion is to US/GB measures. The keys are: inv ... brl UK psi in in' in" acr BP lb oz *oz *oz psf ft ft' ft" (g) RR tns pin *pi *pi o/g yd yd' yd" hp UH tnl gal *gl *gl l/f mi mi' mi" nm ISh Let's go by columns... ...and the values 1.Mass 2.Dry Volume inv on/off (back to normal) pound -> g ounce -> ml 453.5924 28.3495 Ton(short) pint to litre 907.1847 0.5506 Ton(long) gallon to litre 1016.0469 4.4050 3.4.Liquid volume, US and UK barrel (oil) troy ounce -> g 158.9873 31.1035 fl.ounce fl.ounce -> ml 29.5735 28.4130 fl.pint fl.pint -> l 0.4732 0.5682 fl.gallon fl.gallon -> l 3.7854 4.5460 5.Preasure/Density Pound per sq.inch -> kPa 6.8947 Pound per sq.foot -> Pa 47.8800 oz/gal 7.4890 lb/ft3 16.0190 6.Length 7.Area inch -> cm sq.inch -> cm2 2.5400 6.4516 foot -> m sq.foot -> dm2 0.3048 9.2903 yard -> m sq.yard -> m2 0.9144 0.8361 mile -> km sq.mile -> km2 1.6093 2.5900 8.Volume cub.inch -> cm3 16.3870 cub.foot -> litre 28.3168 cub.yard -> litre 764.5549 cub.mile -> km3 4.1678 9.Misc acre --> m2 4046.8630 g (gravity) 9.8067 horsepower 745.7000 nautical mile 1.8520 10.Currency Brit. Pound 1.5648 Rus. Ruble 0.0317 Ukr. Hrivna 0.1877 Isr. Shekel 0.2145 Well, in general, I made what I needed or going to use. But your suggestions are welcome anyway. To do: whole:min:sec, dates parsing display 6-hex 8-oct 2-bin 0-hms 1-date,time load/save workspace is_prime, nth_prime, gamma, perm, comb, NOK, NOD, min, max programming/scripts, configuration/customization etc. Please report any bugs, suggestions, and spelling corrections! The program, the math library and the documentation are copyrighted and should be licensed for commercial use. Thanks to all the Rex 6000 community!!! G-: