commit - a78b1841be06709756d7fd3ccb6abac3a14a3cdb
commit + 775cb933ecea6361717ef1def27b5d9e90c385fd
blob - 67a7b365fbffe5b8abef6cdbd72cac2b66229761
blob + 3344d28e46bed95f5a1533348ab38e69536aa0b2
--- src/cmd/fontsrv/a.h
+++ src/cmd/fontsrv/a.h
XFont *xfont;
int nxfont;
+enum {
+ SubfontSize = 32,
+ SubfontMask = (1<<16)/SubfontSize - 1,
+};
+
struct XFont
{
char *name;
int loaded;
- uchar range[256]; // range[i] == whether to have subfont i<<8 to (i+1)<<8.
+ uchar range[(1<<16)/SubfontSize]; // range[i] == whether to have subfont i*SubfontSize to (i+1)*SubfontSize - 1.
int nrange;
int unit;
double height;
blob - 5a43ef1579423f6085f9f4bbb368b0ca4f6f9bb0
blob + b00802d88c38c197d90905b7d922fdaa19ec47dc
--- src/cmd/fontsrv/main.c
+++ src/cmd/fontsrv/main.c
#define QFONT(p) (((p) >> 4) & 0xFFFF)
#define QSIZE(p) (((p) >> 20) & 0xFF)
#define QANTIALIAS(p) (((p) >> 28) & 0x1)
-#define QRANGE(p) (((p) >> 29) & 0xFF)
+#define QRANGE(p) (((p) >> 29) & SubfontMask)
static int sizes[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 24, 28 };
static vlong
break;
case Qsubfontfile:
- snprint(buf, sizeof buf, "x%02llx00.bit", QRANGE(path));
+ snprint(buf, sizeof buf, "x%04x.bit", (int)QRANGE(path)*SubfontSize);
name = buf;
break;
}
goto NotFound;
p++;
n = strtoul(p, &p, 16);
- if(p != name+5 || (n&0xFF) != 0 || strcmp(p, ".bit") != 0 || !f->range[(n>>8) & 0xFF])
+ if(p != name+5 || n%SubfontSize != 0 || strcmp(p, ".bit") != 0 || !f->range[(n/SubfontSize) & SubfontMask])
goto NotFound;
- path += Qsubfontfile - Qsizedir + qpath(0, 0, 0, 0, (n>>8) & 0xFF);
+ path += Qsubfontfile - Qsizedir + qpath(0, 0, 0, 0, (n/SubfontSize) & SubfontMask);
break;
}
Found:
for(i=0; i<nelem(f->range); i++) {
if(f->range[i] == 0)
continue;
- fmtprint(&fmt, "0x%04x 0x%04x x%04x.bit\n", i<<8, (i<<8) + 0xFF, i<<8);
+ fmtprint(&fmt, "0x%04x 0x%04x x%04x.bit\n", i*SubfontSize, ((i+1)*SubfontSize) - 1, i*SubfontSize);
}
data = fmtstrflush(&fmt);
readstr(r, data);
f = &xfont[QFONT(path)];
load(f);
if(r->fid->aux == nil) {
- r->fid->aux = mksubfont(f, f->name, QRANGE(path)<<8, (QRANGE(path)<<8)+0xFF, QSIZE(path), QANTIALIAS(path));
+ r->fid->aux = mksubfont(f, f->name, QRANGE(path)*SubfontSize, ((QRANGE(path)+1)*SubfontSize)-1, QSIZE(path), QANTIALIAS(path));
if(r->fid->aux == nil) {
responderrstr(r);
return;
blob - 8245d0f7b418089786bad384021f3c1d06755829
blob + f106d2532f5076bccbe6069bac5a28aa3fefeeab
--- src/cmd/fontsrv/x11.c
+++ src/cmd/fontsrv/x11.c
for(charcode=FT_Get_First_Char(face, &glyph_index); glyph_index != 0;
charcode=FT_Get_Next_Char(face, charcode, &glyph_index)) {
- int idx = charcode>>8;
+ int idx = charcode/SubfontSize;
if(charcode > 0xffff)
break;
blob - fdbc6563833c87f44abae3387ed15ada1b6813c0
blob + b97ea22d51b230c8b3e82431d75a582b4b56d28b
--- src/libdraw/openfont.c
+++ src/libdraw/openfont.c
n = _drawflength(fd);
if(fd < 0 && strncmp(fname, "/mnt/font/", 10) == 0) {
fd = _fontpipe(fname+10);
- n = 8192;
+ n = 128*1024;
}
if(fd < 0)
return 0;