With my acer n50 handheld pocket putty does not work (neither the stable nor the development branch), because all characters are translated to lowercase... and apparently this happens for other people too.
If I have understood how the code works (in the dev branch) the problem is that ToAsciiEx is not available in PocketPC 2003 (at least. it does not show in the eVC++ 4 docs), and so translation is done by hand just with
| chvalue = MapVirtualKey(uVirtKey, 2); |
that unfortunately lowercases everything: documentation reads
| Quote: |
| uCode is a virtual-key code and is translated into an unshifted character value in the low-order word of the return value |
I don't know what would be the best solution in long term, but apparently there is a workaround for this which allows most ascii characters to work (special characters like ù or @ don't work perfectly, sometimes they appear and sometimes they wait for another key to be typed and appear only then), arrow keys, Tabs, Backspace, Del and also the Ctrl+D, Ctrl+C, and Ctrl+A work (Ctrl+Z seems not to work, instead).
Within the screen terminal program some keys stop working (notably arrow keys and Del), but it can probably be fixed in .inputrc or such.
The workaround consists in telling the system to handle itself the key event for standard ascii chars and convert them in WM_CHAR messages (which are handled normally).
While probably a better solution could be found, maybe it would be nice to add to the download options also a version with this patch for those who actually need PocketPutty working now on their handheld, and accept the risk of using a not well tested release of it.
The patch is just a few lines:
Index: wince/wince_window.c
===================================================================
--- wince/wince_window.c (revision 12)
+++ wince/wince_window.c (working copy)
@@ -2381,6 +2381,13 @@
char cbuf[2];
cbuf[0] = '\033';
cbuf[1] = ch;
+/// BEGIN GIO
+// delegate 'normal' keys to WM_CHAR so they are translated by the system
+if (((ch >= ' ') && (ch <= '~')) ||
+ ((ch >= 128) && (ch <= 254))) {
+ return -1; // this should be enough !
+}
+/// END GIO
term_seen_key_event(term);
if (ldisc)
lpage_send(ldisc, kbd_codepage,
|