diff options
-rw-r--r-- | src/cmd/devdraw/osx-srv.c | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/src/cmd/devdraw/osx-srv.c b/src/cmd/devdraw/osx-srv.c index 9dded632..fc943d16 100644 --- a/src/cmd/devdraw/osx-srv.c +++ b/src/cmd/devdraw/osx-srv.c @@ -395,9 +395,9 @@ mousetrack(int x, int y, int b, int ms) matchmouse(); zunlock(); } - + void -keystroke(int c) +kputc(int c) { zlock(); kbd.r[kbd.wi++] = c; @@ -408,3 +408,39 @@ keystroke(int c) matchkbd(); zunlock(); } + +void +keystroke(int c) +{ + static Rune k[10]; + static int alting, nk; + int i; + + if(c == Kalt){ + alting = !alting; + return; + } + if(!alting){ + kputc(c); + return; + } + if(nk >= nelem(k)) // should not happen + nk = 0; + k[nk++] = c; + c = _latin1(k, nk); + if(c > 0){ + alting = 0; + kputc(c); + nk = 0; + return; + } + if(c == -1){ + alting = 0; + for(i=0; i<nk; i++) + kputc(k[i]); + nk = 0; + return; + } + // need more input + return; +} |