| #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; | 
 | } |