iPhone version: add option to disable key click. Hmm, what about the PalmOS and Pocket PC versions? There have also been requests for 'vibrate' feedback for key presses. I hate that myself but it takes all sorts. :-) Android version: * 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 * Add an option to display skins scaled to their maximum size while maintaining aspect ratio, or to display skins without any scaling. * The display looks blurry on some devices. Buffering it at device resolution, rather than at 42S resolution, would fix that (same as how the iPhone version handles this). * The "Print-Out" menu option needs a better icon. * 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. All versions: make sure Free42 saves its state when the OS shuts down. The Android, iOS, and PalmOS versions should be OK because the OS controls their life-cycle anyway, but the desktop and Pocket PC versions probably need to deal with OS shutdown explicitly. Even the Linux version may need some attention; while it performs a graceful exit on SIGINT, it may also be killed by the X server shutting down, and if that causes an X I/O error, that makes Free42 send itself a QUIT signal, which causes a core dump (this is good for debugging but probably should be changed to sending an INT signal for release builds). iPhone version: the App Store build is built using the 3.0 SDK, in order to be compatible with the widest possible variety of devices. This works, and even the high-res icon and skins work on the retina display, but the app doesn't multi-task. Is it possible to support multitasking while building with an old SDK? iPhone version: the HTTP server interface should provide a way to delete files. 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 Free42 mapping! Another Windows "Calculator Key" issue: it doesn't seem to work in multi- language installs. Some other registry key overriding the obvious one, it seems. Pocket PC version: add options to hide the title and menu bars. Windows version: after switching windows using Alt-Tab, sometimes Free42 stops responding to the keyboard. Maybe it sees alt-down and then never the alt-up? UPDATE: My diagnosis appears to be correct. Also note that the problem appears to be 100% reproducible in Windows 7, and that V41 and XP Paint are similarly affected (and presumably anything else that uses the classic menu bar as well). Sounds like a Windows bug, but I guess the onus will be on me to come up with a workaround. Mac version: implement print-out window. Modify the file selection dialogs so they have a file type menu, and add extensions to file names automagically when appropriate. Pressing Command-N, or any Command-key combination that isn't defined in the menu, causes Free42 to act as if the key were pressed without Command, and never released... after which, the keyboard is unresponsive to mouse clicks, and you need to press some other keyboard key to unfreeze it. iPhone version: implement print-out window. Implement program import/export to local files. Implement pop-up keyboard for ALPHA mode text entry. Implement copy & paste. Implement URL decoding for HTTP requests (filenames with spaces, etc.) Motif version: activating the Skin menu by clicking on it, as opposed to the old-Mac-style press-hold-drag-release cycle, often causes a crash. Could be a Lesstif bug: the Mac build appears immune, and it uses OpenMotif, while the Linux (FC6) and Cygwin builds crash, and they use Lesstif. Sounds like some evil interaction with the callback I use to populate the menu; maybe Lesstif just doesn't like me repopulating the menu in the map callback. iPhone version: it is possible to disable the sleep timer using [UIApplication sharedApplication].idleTimerDisabled = YES; This would be a good thing to use to prevent auto-poweroff while a program is running. iPhone version: leaving the HTTP Server doesn't always manage to close the server socket. The result can be (1) reopening the HTTP Server fails to bind the socket to the desired port, or (2) the app hangs, presumably while trying to connect to the socket to tell the server to shut down. In both cases, the server loop appears to be hanging, which in turn must have something to do with the fact that it handles all connections on a single thread: when handling one connection never terminates for whatever reason, all subsequent operations either fail (case #1, above) or hang (case #2, above). PalmOS: Flag 11 doesn't work on power cycle: After exit and restart, it does work; after power cycle, the "running" annunciator comes on, but the program does not actually run. Sounds like the event queue needs to be prodded. The whole flag 11 thing seems flaky on several platforms. Also, what about LBL "NASTY" SF 11 OFF GTO "NASTY" ? I think we should have some kind of check for the case where the calc does OFF without ever having handled any kind of user events since power-on; it should either refuse to power off, or clear flag 11 before powering off, or do some kind of user interaction to give the user a chance to break this potentially inescapable cycle. 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.
Go back.