Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
5 /*
6 * Default version: convert to file name
7 */
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 else
26 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 }