Commit Diff


commit - 8cb7983083a94e2bdedcd24ca4ba0ccbefcf61b8
commit + 81a90f898bf58852ca414ae612751e6cff06566c
blob - 9dded63285467e139e2c28a35bfba0dd57ac88da
blob + fc943d166a24785d5b26ed35e5d338ffce2c4a58
--- src/cmd/devdraw/osx-srv.c
+++ 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;
@@ -407,4 +407,40 @@ keystroke(int c)
 		kbd.stall = 1;
 	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;
 }