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.
* Support arbitrary skin scaling and positioning.
* Add support for physical keyboards.
* Implement pop-up keyboard for ALPHA mode text entry.
* Implement better visual feedback for which key is pressed.

iPhone version:
* Implement dynamic layout, to better support arbitrary screen sizes. Right now
  we're still hard-coded for iPhone <= 5/5c/5s.
* Mention iTunes file transfer in the Import/Export documentation page.
* 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 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

Windows version:
* The "Calculator Key" option should probably set
  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.
* Implement low-battery checker.

Linux version:
* Update low-battery checker to work with /proc/acpi/battery and
* Try to get Skin menu to work with Unity's indicator-appmenu.

All versions:
* Add link to 42s.pdf in the About box.
* Binary version: ADATE: 10.102010 => 10/10/2009. Binary round-off problem.
* Add a command that turns on everything in the display -- all pixels and all
  annunciators -- to help with testing skins.
* 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.
* Copy and paste should perform number-to-string and string-to-number using
  locale-sensitive conversions. Also, look into nice stuff like copying and
  pasting raw numbers (i.e. avoiding the string conversions when possible),
  complex numbers, and matrices.

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.