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