Android version: * Sometimes, with some skins, a one-pixel horizontal line appears above the display. Off-by-one error in the blitting call? * The key click is flaky on some devices. Why? * Add android:installLocation property to the manifest, to support installing the app on external memory (SD card) under Android 2.2 or later. See http://developer.android.com/guide/appendix/install-location.html * Support arbitrary skin scaling and positioning. * ACCEL, LOCAT, and HEADING don't work on a lot of devices. I'll have to rewrite them using the new APIs (ugh). * Add support for physical keyboards. * Implement pop-up keyboard for ALPHA mode text entry. * Scale print-out (the current 2:1 scaling is a bit small on large screens) * Implement better visual feedback for which key is pressed. iPhone version: * Downgrade to older Xcode so I can get back to supporting iOS 3.1.3. * Add option to disable key click. * Haptic feedback option. * The pop-up keyboard handling in the Preferences and File Selection views is broken. The screen often doesn't scroll up when the keyboard appears. That should be fixed, and while you're at it, put those views inside scroll views, so you can scroll them when the keyboard is visible. * Implement pop-up keyboard for ALPHA mode text entry. * Implement copy & paste. * Implement URL decoding for HTTP requests (filenames with spaces, etc.) * Support iPad, iPad mini, and iPhone 5 (screen size issues, and take advantage of big screens to show the calculator and print-out side-by-side). * Support arbitrary skin scaling and positioning. * Support landscape mode. * When the app is suspended while the HTTP server is active, shut down the HTTP server. I think this is the one remaining issue that causes the server port to be unavailable on HTTP server startup. * Implement better visual feedback for which key is pressed. * Instead of the automatic Default.png on start-up, show a screenshot of the most recent app state, with the word "Loading" painted on top. This way, users that do not use the Standard skin will not get the jarring transition from Standard to their selected skin. Of course, whether all this is doable will depend on how quickly we can load and display a PNG (before the heavy lifting of initializing the emulator core and reading the skin GIF). * In the HTTP server view, make it clearer that it can't be used if there's no WiFi. Don't show a URL containing some bogus 3G hostname or whatever. Also, deal with the possibility of WiFi becoming active or inactive while Free42 is running. Windows version: * Figure out how to do command-line build, or just downgrade to VC++ 6.0. It's not like I *need* anything newer, and if 6.0 and 2012 can coexist, why not? * Detect failure to create keymap.txt, state.bin, and print.bin, and display a helpful message when this occurs. (The most common scenario is probably people dropping Free42.exe into Program Files without creating a subdirectory.) * The "Calculator Key" option should probably set \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18\ShellExecute, not \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AppKey\18\ShellExecute. Easy enough to fix, but make sure that the new code restores the HKEY_LOCAL_MACHINE key so that people won't have to use regedit to get rid of the old Free42 mapping! * Press a key with the mouse, then move the mouse outside of the window, then release the mouse button. The key stays pressed; apparently the mouse-up is not handled in this case. * Another "Calculator Key" issue: it doesn't seem to work in multi-language installs. Some other registry key overriding the obvious one, it seems. But maybe that'll be fixed by dealing with the issue above. Mac version: * Modify the file selection dialogs so they have a file type menu, and add extensions to file names automagically when appropriate. GTK version: * The display may not get repainted properly when switching skins. * Add support for the Unity dock. All versions: * Add a feature for importing and exporting variables from and to CSV files. * It would be nice if we would handle the shell_milliseconds() wrap-around. This function is only used for flying the goose and updating the progress report when the solver is running interactively; all it would take is for those two places in the code to detect unlikely values of (startTime - shell_milliseconds()) and assume the nearest likely alternative, a la Y2K. * Display "decimal" or "binary" in the About box, with the version number. The "Wouldn't It Be Nice" Department: * Algebraic equations. * Units, like on the HP-48G, where units are attached to values.