Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>5 /*6 * Default version: convert to file name7 */9 char*10 subfontname(char *cfname, char *fname, int maxdepth)11 {12 char *t, *u, *tmp1, *tmp2, *base;13 int i, scale;15 scale = parsefontscale(fname, &base);17 t = strdup(cfname); /* t is the return string */18 if(strcmp(cfname, "*default*") == 0)19 return t;20 if(t[0] != '/'){21 tmp2 = strdup(base);22 u = utfrrune(tmp2, '/');23 if(u)24 u[0] = 0;25 else26 strcpy(tmp2, ".");27 tmp1 = smprint("%s/%s", tmp2, t);28 free(tmp2);29 free(t);30 t = tmp1;31 }33 if(maxdepth > 8)34 maxdepth = 8;36 for(i=3; i>=0; i--){37 if((1<<i) > maxdepth)38 continue;39 /* try i-bit grey */40 tmp2 = smprint("%s.%d", t, i);41 if(access(tmp2, AREAD) == 0) {42 free(t);43 if(scale > 1) {44 t = smprint("%d*%s", scale, tmp2);45 free(tmp2);46 tmp2 = t;47 }48 return tmp2;49 }50 }52 /* try default */53 if(strncmp(t, "/mnt/font/", 10) == 0 || access(t, AREAD) == 0) {54 if(scale > 1) {55 tmp2 = smprint("%d*%s", scale, t);56 free(t);57 t = tmp2;58 }59 return t;60 }62 return nil;63 }