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 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. * Implement low-battery checker. Linux version: * Update low-battery checker to work with /proc/acpi/battery and /sys/class/power_supply. * 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.