Free42 TODO

Android version:
* Sometimes, the app saves the state file after reinitialize_globals(). How is
  this possible, and how to prevent it? N.B. This is one cause, and quite
  possibly the only one, of the native-code crash in vartype2string() called
  from display_y(); it's dereferencing reg_y while it is NULL, leading to a
  segmentation fault.
* 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.
* 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:
* Preferences looks a bit ugly in iOS 7, because the now-much-smaller switches
  no longer line up with the right margin. How do I create a settings screen
  that looks more like the iOS Settings app?
* Suppress too-large skins from the Select Skin view.
* Add option to disable key click.
* Haptic feedback option.
* Implement pop-up keyboard for ALPHA mode text entry.
* Implement copy & paste.
* Implement URL decoding for HTTP requests (filenames with spaces, etc.)
* Support iPad, and iPad mini (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.
* 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:
* When you resize the print-out window, the bottom of the print-out doesn't get
  updated, until you either print something or bouce the app.
* 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.
* Fix behavior of TAN and TANH for large complex arguments. Currently, those
  return NaNs, because infinities are divided by infinities. It looks like the
  real 42S simply pretends Inf/Inf == 1 for those cases.
* 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.