Blame


1 76193d7c 2003-09-30 devnull #include <u.h>
2 76193d7c 2003-09-30 devnull #include <libc.h>
3 76193d7c 2003-09-30 devnull #include <draw.h>
4 76193d7c 2003-09-30 devnull
5 76193d7c 2003-09-30 devnull /*
6 76193d7c 2003-09-30 devnull * Default version: convert to file name
7 76193d7c 2003-09-30 devnull */
8 76193d7c 2003-09-30 devnull
9 76193d7c 2003-09-30 devnull char*
10 76193d7c 2003-09-30 devnull subfontname(char *cfname, char *fname, int maxdepth)
11 76193d7c 2003-09-30 devnull {
12 213fc4f6 2015-02-17 rsc char *t, *u, *tmp1, *tmp2, *base;
13 213fc4f6 2015-02-17 rsc int i, scale;
14 fa325e9b 2020-01-10 cross
15 213fc4f6 2015-02-17 rsc scale = parsefontscale(fname, &base);
16 76193d7c 2003-09-30 devnull
17 d4aef6a0 2005-05-12 devnull t = strdup(cfname); /* t is the return string */
18 16d00819 2018-11-16 rsc if(strcmp(cfname, "*default*") == 0) {
19 16d00819 2018-11-16 rsc if(scale > 1) {
20 16d00819 2018-11-16 rsc free(t);
21 16d00819 2018-11-16 rsc return smprint("%d*%s", scale, cfname);
22 16d00819 2018-11-16 rsc }
23 d4aef6a0 2005-05-12 devnull return t;
24 16d00819 2018-11-16 rsc }
25 76193d7c 2003-09-30 devnull if(t[0] != '/'){
26 213fc4f6 2015-02-17 rsc tmp2 = strdup(base);
27 76193d7c 2003-09-30 devnull u = utfrrune(tmp2, '/');
28 76193d7c 2003-09-30 devnull if(u)
29 76193d7c 2003-09-30 devnull u[0] = 0;
30 76193d7c 2003-09-30 devnull else
31 76193d7c 2003-09-30 devnull strcpy(tmp2, ".");
32 d4aef6a0 2005-05-12 devnull tmp1 = smprint("%s/%s", tmp2, t);
33 d4aef6a0 2005-05-12 devnull free(tmp2);
34 d4aef6a0 2005-05-12 devnull free(t);
35 76193d7c 2003-09-30 devnull t = tmp1;
36 76193d7c 2003-09-30 devnull }
37 76193d7c 2003-09-30 devnull
38 76193d7c 2003-09-30 devnull if(maxdepth > 8)
39 76193d7c 2003-09-30 devnull maxdepth = 8;
40 76193d7c 2003-09-30 devnull
41 161060a4 2003-10-11 devnull for(i=3; i>=0; i--){
42 161060a4 2003-10-11 devnull if((1<<i) > maxdepth)
43 161060a4 2003-10-11 devnull continue;
44 76193d7c 2003-09-30 devnull /* try i-bit grey */
45 d4aef6a0 2005-05-12 devnull tmp2 = smprint("%s.%d", t, i);
46 d4aef6a0 2005-05-12 devnull if(access(tmp2, AREAD) == 0) {
47 d4aef6a0 2005-05-12 devnull free(t);
48 213fc4f6 2015-02-17 rsc if(scale > 1) {
49 213fc4f6 2015-02-17 rsc t = smprint("%d*%s", scale, tmp2);
50 213fc4f6 2015-02-17 rsc free(tmp2);
51 213fc4f6 2015-02-17 rsc tmp2 = t;
52 213fc4f6 2015-02-17 rsc }
53 d4aef6a0 2005-05-12 devnull return tmp2;
54 d4aef6a0 2005-05-12 devnull }
55 dc2a17b9 2018-03-27 0intro free(tmp2);
56 76193d7c 2003-09-30 devnull }
57 76193d7c 2003-09-30 devnull
58 76193d7c 2003-09-30 devnull /* try default */
59 213fc4f6 2015-02-17 rsc if(strncmp(t, "/mnt/font/", 10) == 0 || access(t, AREAD) == 0) {
60 213fc4f6 2015-02-17 rsc if(scale > 1) {
61 213fc4f6 2015-02-17 rsc tmp2 = smprint("%d*%s", scale, t);
62 213fc4f6 2015-02-17 rsc free(t);
63 213fc4f6 2015-02-17 rsc t = tmp2;
64 213fc4f6 2015-02-17 rsc }
65 d4aef6a0 2005-05-12 devnull return t;
66 213fc4f6 2015-02-17 rsc }
67 76193d7c 2003-09-30 devnull
68 76193d7c 2003-09-30 devnull return nil;
69 76193d7c 2003-09-30 devnull }