LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Там можно произвольную строчку указывать, если что. Параметры -sample, -sample16 и -sampleUCS.

Вот, собственно, процедура:

static void _XawLabelDrawUCS(Display *dpy, Drawable d, GC gc,
			     int x, int y, char *str, int n)
{
    char *ep;
    unsigned short codepoint;
    XChar2b *ptr;

    /*
     * Convert to UCS2 string on the fly.
     */

    if (n > buf2blen) {
	buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
	buf2blen = n;
    }
    ep = str + n;
    for (ptr = buf2b; str < ep; ptr++) {
        if((str[0]&0x80)==0) {
            codepoint=str[0];
            str++;
        } else if((str[0]&0x20)==0) {
            codepoint=(str[0]&0x1F)<<6 | (str[1]&0x3F);
            str+=2;
        } else if((str[0]&0x10)==0) {
            codepoint=(str[0]&0x0F)<<12 | (str[1]&0x3F)<<6 | (str[2]&0x3F);
            str+=3;
        } else {                    /* wrong UTF-8 */
            codepoint=(unsigned)'?';
            str++;
        }
	ptr->byte1 = (codepoint >> 8) & 0xff;;
	ptr->byte2 = codepoint & 0xff;
    }
    XDrawString16(dpy, d, gc, x, y, buf2b, ptr - buf2b);
}

Исходная версия Zubok, :

Там можно произвольную строчку указывать, если что. Параметры -sample, -sample16 и -sampleUCS.

Вот, собственно, процедура:

static void _XawLabelDrawUCS(Display *dpy, Drawable d, GC gc,
			     int x, int y, char *str, int n)
{
    char *ep;
    unsigned short codepoint;
    XChar2b *ptr;

    /*
     * Convert to UCS2 string on the fly.
     */

    if (n > buf2blen) {
	buf2b = (XChar2b *)XtRealloc((char *)buf2b, n * sizeof(XChar2b));
	buf2blen = n;
    }
    ep = str + n;
    for (ptr = buf2b; str < ep; ptr++) {
        if((str[0]&0x80)==0) {
            codepoint=str[0];
            str++;
        } else if((str[0]&0x20)==0) {
            codepoint=(str[0]&0x1F)<<6 | (str[1]&0x3F);
            str+=2;
        } else if((str[0]&0x10)==0) {
            codepoint=(str[0]&0x0F)<<12 | (str[1]&0x3F)<<6 | (str[2]&0x3F);
            str+=3;
        } else {                    /* wrong UTF-8 */
            codepoint=(unsigned)'?';
            str++;
        }
	ptr->byte1 = (codepoint >> 8) & 0xff;;
	ptr->byte2 = codepoint & 0xff;
    }
    XDrawString16(dpy, d, gc, x, y, buf2b, ptr - buf2b);
}