#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[64], tmp2[64];
	int i;

	if(strcmp(cfname, "*default*") == 0)
		return strdup(cfname);
	t = cfname;
	if(t[0] != '/'){
		snprint(tmp2, sizeof tmp2, "%s", fname);
		u = utfrrune(tmp2, '/');
		if(u)
			u[0] = 0;
		else
			strcpy(tmp2, ".");
		snprint(tmp1, sizeof tmp1, "%s/%s", tmp2, t);
		t = tmp1;
	}

	if(maxdepth > 8)
		maxdepth = 8;

	for(i=3; i>=0; i--){
		if((1<<i) > maxdepth)
			continue;
		/* try i-bit grey */
		snprint(tmp2, sizeof tmp2, "%s.%d", t, i);
		if(access(tmp2, AREAD) == 0)
			return strdup(tmp2);
	}

	/* try default */
	if(access(t, AREAD) == 0)
		return strdup(t);

	return nil;
}
