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 if(scale > 1) {20 free(t);21 return smprint("%d*%s", scale, cfname);22 }23 return t;24 }25 if(t[0] != '/'){26 tmp2 = strdup(base);27 u = utfrrune(tmp2, '/');28 if(u)29 u[0] = 0;30 else31 strcpy(tmp2, ".");32 tmp1 = smprint("%s/%s", tmp2, t);33 free(tmp2);34 free(t);35 t = tmp1;36 }38 if(maxdepth > 8)39 maxdepth = 8;41 for(i=3; i>=0; i--){42 if((1<<i) > maxdepth)43 continue;44 /* try i-bit grey */45 tmp2 = smprint("%s.%d", t, i);46 if(access(tmp2, AREAD) == 0) {47 free(t);48 if(scale > 1) {49 t = smprint("%d*%s", scale, tmp2);50 free(tmp2);51 tmp2 = t;52 }53 return tmp2;54 }55 free(tmp2);56 }58 /* try default */59 if(strncmp(t, "/mnt/font/", 10) == 0 || access(t, AREAD) == 0) {60 if(scale > 1) {61 tmp2 = smprint("%d*%s", scale, t);62 free(t);63 t = tmp2;64 }65 return t;66 }68 return nil;69 }