After a long silence due to extensive code reorganization and integration with the user interface, things are coming together nicely.
Now there is a Qt-based simulator that shows a screen identical to that of a 50g, and allows the user to interact with newRPL exactly as it will be seen on real hardware. This will allow users to test-drive the user interface and provide feedback.
As of today, the command line editor is rudimentary but allows entering numbers in the stack. The keyboard system is completely customizable, and while not completely implemented yet (only a few keys have handlers right now), it's ready to receive individual key handlers.
There's 2 layers of keyboard handlers: custom handlers and system defaults. There is a system variable that tells whether the system is showing the stack, PICT, a form, or within the command line editor, etc. This allows handlers to react to the context. Handlers can be installed for a specific context or for all contexts, and for specific key messages: key down/up, key press, long key press, and all their shifted combinations.
In this way, a key handler can be installed for example for the right cursor key, unshifted, when the context is the stack only, and perform SWAP (this is the default). A different handler can be installed for the same key, when the command line editor is open, and move the cursor right, for example.
As an advanced example, the Enter key could be customized for the stack context only (when no command line is active), and make it do something different than DUP. All this without interfering with the Enter function within programs, the command line, etc.
There will be no limit on how many handlers the user can install. Each handler will have a context, an associated key and the action object. The system will scan through the list of handlers and execute the first one that matches the context/key combination.
When a key is pressed, the system will look for a variable '.KeyTable' (this name is subject to change). This variable will be searched for from the inner local environments towards the root directory. All lists will be searched for until one has a match for the pressed key, otherwise a default system handler will be executed.
Any program can redefine keys just by creating a local variable. If the program doesn't create its own message loop, it can always store the list in its directory, or worst case modify the list in the root directory (for something more permanent).
An application with a form could change the Enter key to perform data validation when using the command line for an edit box, for example.
While there's still some work to do, the next demo is getting closer. The plan is to release it as soon as the code can function as a basic calculator with the 4 basic operations. More and more features will be added later. The demo is planned to be released for both the Qt simulator and for the first time as a calculator ROM.