Example #1
0
static int tvterm_put_uchar(struct TVterm* p, u_int ch)
{
	TFont *pf = &gFont[p->utf8Idx];
	u_int w;
	if(p->pen.x == p->xmax) {
		p->wrap = true;
		p->pen.x--;
	}

	if(p->wrap) {
		p->pen.x -= p->xmax - 1;

		if (p->pen.y == p->ymax - 1) {
			p->scroll++;
		} else {
			p->pen.y++;
		}

		p->wrap = false;

		return -1;
	}

	pf->conv(pf, ch, &w);

	if(pf->width == w) {
		INSERT_N_CHARS_IF_NEEDED(p, 1);
		tvterm_uput1(p, p->utf8Idx, ch);
		p->pen.x++;
	} else {
		INSERT_N_CHARS_IF_NEEDED(p, 2);
		tvterm_uput2(p, p->utf8Idx, ch);
		p->pen.x += 2;
	}

	p->utf8remain = 0;
	p->ucs2ch = 0;

	return 0;
}