Sometime during me being a student, I wanted to move to a new calculator from a Casio fx991ES and a Texas Instruments TI-68. Both of which are great calculators, and I still have them. Though the TI68 has fallen victim to a common problem with columns of its display giving up. My eye was on the TI-89 Titanium. But I was saved by a then grml project member, setting me onto the one true path of RPN supremacy, by going with the then new HP50g. Thanks gebi! :)
All jokes aside, it is an awesome machine. It has all the features you want, and so much more. And it has an extension SD card slot, that accepts SD cards up to 2GiB in storage space. Basically infinite storage for extensions you may want. I never used it much for graphing the values of expressions. I loved the huge screen, because it allowed me to see many levels of the system's stack. One of its killer features is that it's keyboard can be totally customised, and the six function keys on the top of the keyboard that usually operate built-in soft-menus, can also be made to host custom soft-menus. Which means you can implement your own commands that implement whatever tasks you often need to perform, link them into soft-menus and thus invoke your most common tasks with ease. It's a pretty awesome input system.
The HP calculators have a bit of a cult-like following. And people over the years have written unbelievable tools for it. One such tool is keyman by professor Wolfgang Rautenberg, which extends the customisability of the HP50g's keyboard quite a bit compared to what HP's standard features offer. In particular, you can bind actions to long-presses on any key of the keyboard. Very nice! I use that for all my custom bindings.
I still own that HP50g and it is indeed on my desk at work. And I also have a copy of that calculator via the absolutely awesome Emu48 android application. But most of the time I also have a computer in front of me. Which means I have access to all sorts of desktop calculators (which I thought all sucked, until I was recently made aware of Qalculate which looks pretty neat), as well as GNU Octave and Maxima. I still believe that the input method popularised by the classic HP calculators is pretty unrivaled, especially when it comes to quick numeric calculations. Much to my delight, Emacs comes with GNU Calc, which is a rather advanced scientific calculator1, whose interface was loosely based on the HP calculators of the time. And it is awesome, sometimes dubbed the poor-man's-mathematica. :)
When loaded, it looks very unassuming, here is how it looks after calculating
5+6*7 = 47
using its stack:
Compared to the real HP calculators however, I am always missing that soft-menu feature so I can have my most used functions at my fingertips, with a friendly hint on what to press on a label of a button in my screen. Fear not, though! Since it's Emacs, there should be a way to add something like that. Right!? Yes. Yes, there is. Here's how it might looks with default configurartion and a soft-menu full of useful constants loaded into it:
It was pretty straight forward too. I had the basics going in a couple of hours, and over a bunch of evenings I had the system working mostly like I wanted, including supporting calc's algebraic entry mode. Finally it took me a couple of hours to turn the code I had into a well-behaved minor mode for calc, that can be enabled and disabled at the user's behest. The basic idea is to hijack calc's mode-line to display an HP-style soft-menu, and offer a command to fill the menu with life.
With that it is very easy to construct calculations built upon custom variables as well as function calls. Here's just a silly example with a multiplication of a bunch of constants from the active soft-menu. Level two has a copy of the original expression, and level one holds the numeric evaluation:
The minor-mode also patches calc's algebraic entry mode, so triggering a softkey will insert a variable or function name into the algebraic entry, similar to how the real HP calculators do it.
This brings me one step closer to having a plan-b when my HP50g inevitably expires.
The implementation of calc-softmenu-mode
in
calc-softmenu.el
is part of my Emacs configuration.