From 6cadd03bbeace1c256ba875c2e6a877f924877cd Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Mon, 31 Dec 2012 21:09:46 +0100 Subject: fix utf and rune handling in preparation for 32bit runes --- sys/src/cmd/vnc/screen.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'sys/src/cmd/vnc') diff --git a/sys/src/cmd/vnc/screen.c b/sys/src/cmd/vnc/screen.c index e11155ac9..ce8a7e818 100644 --- a/sys/src/cmd/vnc/screen.c +++ b/sys/src/cmd/vnc/screen.c @@ -335,6 +335,8 @@ screenputc(char *buf) addflush(r); curpos.x = *xp; break; + case '\0': + break; default: p = memsubfontwidth(memdefont, buf); w = p.x; @@ -354,23 +356,19 @@ screenputc(char *buf) void screenputs(char *s, int n) { - int i; - Rune r; - char buf[4]; + static char rb[UTFmax+1]; + static int nrb; + char *e; drawlock(); - while(n > 0){ - i = chartorune(&r, s); - if(i == 0){ - s++; - --n; - continue; + e = s + n; + while(s < e){ + rb[nrb++] = *s++; + if(nrb >= UTFmax || fullrune(rb, nrb)){ + rb[nrb] = 0; + screenputc(rb); + nrb = 0; } - memmove(buf, s, i); - buf[i] = 0; - n -= i; - s += i; - screenputc(buf); } screenflush(); drawunlock(); -- cgit v1.2.3