Free42 TODO

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:
* 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.

All versions:
* When a "State File Corrupt" occurs, make a copy of the unloved state file,
  so it doesn't get nuked on exit.
* Change state file format to something forward- and cross-platform-compatible.
* Add special-case code to produce exact results for trigs and inverse trigs
  in DEG and GRAD modes -- cases like sin(30) or acos(0.5).
* Add an option or magic keystroke to make SHOW show full precision when there
  is a real number in X -- i.e., 16 digits for binary and 34 for decimal.
* 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:
* Add a feature for importing and exporting variables from and to CSV files.
* Algebraic equations.
* Units, like on the HP-48G, where units are attached to values.

Go back.