[<<] [<] Page 1 of 1 [>] [>>] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Ответ: [nanogui] Re: fonts
From: "Dmitry Baryshev" ####@####.#### Date: 13 Jun 2008 08:06:18 -0000 Message-Id: <39840bc80806130106k1ac2e33bk753db1ec2071c254@mail.gmail.com> Hi, Greg. I checked out CVS, but as I see pcf loader is not changed too much. Let look at pcf_readbitmaps() function: Spec says >>> int32 glyph_count; /* byte ordering depends on format, should be the same as the metrics count */ <<< But pcf_readbitmaps() assumes that glyph_count is LSB: num_glyphs = readLSB32(file); ---- I modified font_pcf.c as follows: /******************************************************/ if ((offset = pcf_get_offset(PCF_BITMAPS)) == -1) return -1; printf("PCF OFFSET %ld\n", offset); FSEEK(file, offset, SEEK_SET); format = readLSB32(file); printf("PCF FORMAT %ld\n", format); endian = (format & PCF_BIT_MASK)? PCF_LSB_FIRST: PCF_MSB_FIRST; printf("PCF ENDIAN %d\n", endian); num_glyphs = readLSB32(file); printf("PCF GLYPH %ld\n", num_glyphs); return -1; /* Avoid segfault on koi8 font */ /******************************************************/ Then I modified mtest.c demo as follows: /******************************************************/ case WM_CREATE: /* This will work */ GdCreateFont(&scrdev, "lubI24.pcf", 0, NULL); /* This will segfault */ GdCreateFont(&scrdev, "koi5x8.pcf", 0, NULL); break; /******************************************************/ I got: /* lubI24.pcf */ PCF OFFSET 2028 PCF FORMAT 2 PCF ENDIAN 1 PCF GLYPH 229 /* Ok */ /* koi5x8.pcf */ PCF OFFSET 2132 PCF FORMAT 14 PCF ENDIAN 0 PCF GLYPH -16777216 /* pcf loader will malloc() this number of bytes and segfault later */ -- [Content type application/octet-stream not shown. Download] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subject:
Ответ: [nanogui] Re: fonts
From: "Dmitry Baryshev" ####@####.#### Date: 13 Jun 2008 08:44:05 -0000 Message-Id: <39840bc80806130144p47f56448we760ce46cb7417d3@mail.gmail.com> Hi, Greg. I checked out CVS, but as I see pcf loader is not changed too much. Let look at pcf_readbitmaps() function: Spec says >>> int32 glyph_count; /* byte ordering depends on format, should be the same as the metrics count */ <<< But pcf_readbitmaps() assumes that glyph_count is LSB: num_glyphs = readLSB32(file); ---- I modified font_pcf.c as follows: /******************************************************/ if ((offset = pcf_get_offset(PCF_BITMAPS)) == -1) return -1; printf("PCF OFFSET %ld\n", offset); FSEEK(file, offset, SEEK_SET); format = readLSB32(file); printf("PCF FORMAT %ld\n", format); endian = (format & PCF_BIT_MASK)? PCF_LSB_FIRST: PCF_MSB_FIRST; printf("PCF ENDIAN %d\n", endian); num_glyphs = readLSB32(file); printf("PCF GLYPH %ld\n", num_glyphs); return -1; /* Avoid segfault on koi8 font */ /******************************************************/ Then I modified mtest.c demo as follows: /******************************************************/ case WM_CREATE: /* This will work */ GdCreateFont(&scrdev, "lubI24.pcf", 0, NULL); /* This will segfault */ GdCreateFont(&scrdev, "koi5x8.pcf", 0, NULL); break; /******************************************************/ I got: /* lubI24.pcf */ PCF OFFSET 2028 PCF FORMAT 2 PCF ENDIAN 1 PCF GLYPH 229 /* Ok */ /* koi5x8.pcf */ PCF OFFSET 2132 PCF FORMAT 14 PCF ENDIAN 0 PCF GLYPH -16777216 /* pcf loader will malloc() this number of bytes and segfault later */ -- [Content type application/octet-stream not shown. Download] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[<<] [<] Page 1 of 1 [>] [>>] |