xref: /plan9/sys/src/cmd/unix/drawterm/gui-win32/wstrtoutf.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier 
4*8ccd4a63SDavid du Colombier int
wstrutflen(Rune * s)5*8ccd4a63SDavid du Colombier wstrutflen(Rune *s)
6*8ccd4a63SDavid du Colombier {
7*8ccd4a63SDavid du Colombier 	int n;
8*8ccd4a63SDavid du Colombier 
9*8ccd4a63SDavid du Colombier 	for(n=0; *s; n+=runelen(*s),s++)
10*8ccd4a63SDavid du Colombier 		;
11*8ccd4a63SDavid du Colombier 	return n;
12*8ccd4a63SDavid du Colombier }
13*8ccd4a63SDavid du Colombier 
14*8ccd4a63SDavid du Colombier int
wstrtoutf(char * s,Rune * t,int n)15*8ccd4a63SDavid du Colombier wstrtoutf(char *s, Rune *t, int n)
16*8ccd4a63SDavid du Colombier {
17*8ccd4a63SDavid du Colombier 	int i;
18*8ccd4a63SDavid du Colombier 	char *s0;
19*8ccd4a63SDavid du Colombier 
20*8ccd4a63SDavid du Colombier 	s0 = s;
21*8ccd4a63SDavid du Colombier 	if(n <= 0)
22*8ccd4a63SDavid du Colombier 		return wstrutflen(t)+1;
23*8ccd4a63SDavid du Colombier 	while(*t) {
24*8ccd4a63SDavid du Colombier 		if(n < UTFmax+1 && n < runelen(*t)+1) {
25*8ccd4a63SDavid du Colombier 			*s = 0;
26*8ccd4a63SDavid du Colombier 			return i+wstrutflen(t)+1;
27*8ccd4a63SDavid du Colombier 		}
28*8ccd4a63SDavid du Colombier 		i = runetochar(s, t);
29*8ccd4a63SDavid du Colombier 		s += i;
30*8ccd4a63SDavid du Colombier 		n -= i;
31*8ccd4a63SDavid du Colombier 		t++;
32*8ccd4a63SDavid du Colombier 	}
33*8ccd4a63SDavid du Colombier 	*s = 0;
34*8ccd4a63SDavid du Colombier 	return s-s0;
35*8ccd4a63SDavid du Colombier }
36