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; }