1*37da2899SCharles.Forsyth #include "lib9.h" 2*37da2899SCharles.Forsyth #include "draw.h" 3*37da2899SCharles.Forsyth 4*37da2899SCharles.Forsyth /* 5*37da2899SCharles.Forsyth * Cobble fake font using existing subfont 6*37da2899SCharles.Forsyth */ 7*37da2899SCharles.Forsyth Font* mkfont(Subfont * subfont,Rune min)8*37da2899SCharles.Forsythmkfont(Subfont *subfont, Rune min) 9*37da2899SCharles.Forsyth { 10*37da2899SCharles.Forsyth Font *font; 11*37da2899SCharles.Forsyth Cachefont *c; 12*37da2899SCharles.Forsyth 13*37da2899SCharles.Forsyth font = malloc(sizeof(Font)); 14*37da2899SCharles.Forsyth if(font == 0) 15*37da2899SCharles.Forsyth return 0; 16*37da2899SCharles.Forsyth memset(font, 0, sizeof(Font)); 17*37da2899SCharles.Forsyth font->display = subfont->bits->display; 18*37da2899SCharles.Forsyth font->name = strdup("<synthetic>"); 19*37da2899SCharles.Forsyth font->ncache = NFCACHE+NFLOOK; 20*37da2899SCharles.Forsyth font->nsubf = NFSUBF; 21*37da2899SCharles.Forsyth font->cache = malloc(font->ncache * sizeof(font->cache[0])); 22*37da2899SCharles.Forsyth font->subf = malloc(font->nsubf * sizeof(font->subf[0])); 23*37da2899SCharles.Forsyth if(font->name==0 || font->cache==0 || font->subf==0){ 24*37da2899SCharles.Forsyth Err: 25*37da2899SCharles.Forsyth free(font->name); 26*37da2899SCharles.Forsyth free(font->cache); 27*37da2899SCharles.Forsyth free(font->subf); 28*37da2899SCharles.Forsyth free(font->sub); 29*37da2899SCharles.Forsyth free(font); 30*37da2899SCharles.Forsyth return 0; 31*37da2899SCharles.Forsyth } 32*37da2899SCharles.Forsyth memset(font->cache, 0, font->ncache*sizeof(font->cache[0])); 33*37da2899SCharles.Forsyth memset(font->subf, 0, font->nsubf*sizeof(font->subf[0])); 34*37da2899SCharles.Forsyth font->height = subfont->height; 35*37da2899SCharles.Forsyth font->ascent = subfont->ascent; 36*37da2899SCharles.Forsyth font->age = 1; 37*37da2899SCharles.Forsyth font->sub = malloc(sizeof(Cachefont*)); 38*37da2899SCharles.Forsyth if(font->sub == 0) 39*37da2899SCharles.Forsyth goto Err; 40*37da2899SCharles.Forsyth c = malloc(sizeof(Cachefont)); 41*37da2899SCharles.Forsyth if(c == 0) 42*37da2899SCharles.Forsyth goto Err; 43*37da2899SCharles.Forsyth font->nsub = 1; 44*37da2899SCharles.Forsyth font->sub[0] = c; 45*37da2899SCharles.Forsyth c->min = min; 46*37da2899SCharles.Forsyth c->max = min+subfont->n-1; 47*37da2899SCharles.Forsyth c->offset = 0; 48*37da2899SCharles.Forsyth c->name = 0; /* noticed by freeup() and agefont() */ 49*37da2899SCharles.Forsyth c->subfontname = 0; 50*37da2899SCharles.Forsyth font->subf[0].age = 0; 51*37da2899SCharles.Forsyth font->subf[0].cf = c; 52*37da2899SCharles.Forsyth font->subf[0].f = subfont; 53*37da2899SCharles.Forsyth return font; 54*37da2899SCharles.Forsyth } 55