| #include <u.h> |
| #include <libc.h> |
| #include <draw.h> |
| |
| /* |
| * Default version: convert to file name |
| */ |
| |
| char* |
| subfontname(char *cfname, char *fname, int maxdepth) |
| { |
| char *t, *u, *tmp1, *tmp2, *base; |
| int i, scale; |
| |
| scale = parsefontscale(fname, &base); |
| |
| t = strdup(cfname); /* t is the return string */ |
| if(strcmp(cfname, "*default*") == 0) |
| return t; |
| if(t[0] != '/'){ |
| tmp2 = strdup(base); |
| u = utfrrune(tmp2, '/'); |
| if(u) |
| u[0] = 0; |
| else |
| strcpy(tmp2, "."); |
| tmp1 = smprint("%s/%s", tmp2, t); |
| free(tmp2); |
| free(t); |
| t = tmp1; |
| } |
| |
| if(maxdepth > 8) |
| maxdepth = 8; |
| |
| for(i=3; i>=0; i--){ |
| if((1<<i) > maxdepth) |
| continue; |
| /* try i-bit grey */ |
| tmp2 = smprint("%s.%d", t, i); |
| if(access(tmp2, AREAD) == 0) { |
| free(t); |
| if(scale > 1) { |
| t = smprint("%d*%s", scale, tmp2); |
| free(tmp2); |
| tmp2 = t; |
| } |
| return tmp2; |
| } |
| } |
| |
| /* try default */ |
| if(strncmp(t, "/mnt/font/", 10) == 0 || access(t, AREAD) == 0) { |
| if(scale > 1) { |
| tmp2 = smprint("%d*%s", scale, t); |
| free(t); |
| t = tmp2; |
| } |
| return t; |
| } |
| |
| return nil; |
| } |