xref: /inferno-os/libdraw/getsubfont.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "lib9.h"
2*37da2899SCharles.Forsyth #include "kernel.h"
3*37da2899SCharles.Forsyth #include "draw.h"
4*37da2899SCharles.Forsyth 
5*37da2899SCharles.Forsyth /*
6*37da2899SCharles.Forsyth  * Default version: treat as file name
7*37da2899SCharles.Forsyth  */
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth Subfont*
_getsubfont(Display * d,char * name)10*37da2899SCharles.Forsyth _getsubfont(Display *d, char *name)
11*37da2899SCharles.Forsyth {
12*37da2899SCharles.Forsyth 	int fd;
13*37da2899SCharles.Forsyth 	Subfont *f;
14*37da2899SCharles.Forsyth 
15*37da2899SCharles.Forsyth 	fd = libopen(name, OREAD);
16*37da2899SCharles.Forsyth 
17*37da2899SCharles.Forsyth 	if(fd < 0){
18*37da2899SCharles.Forsyth 		_drawprint(2, "getsubfont: can't open %s: %r\n", name);
19*37da2899SCharles.Forsyth 		return 0;
20*37da2899SCharles.Forsyth 	}
21*37da2899SCharles.Forsyth 	/*
22*37da2899SCharles.Forsyth 	 * unlock display so i/o happens with display released, unless
23*37da2899SCharles.Forsyth 	 * user is doing his own locking, in which case this could break things.
24*37da2899SCharles.Forsyth 	 * _getsubfont is called only from string.c and stringwidth.c,
25*37da2899SCharles.Forsyth 	 * which are known to be safe to have this done.
26*37da2899SCharles.Forsyth 	 */
27*37da2899SCharles.Forsyth 	if(d->local == 0)
28*37da2899SCharles.Forsyth 		unlockdisplay(d);
29*37da2899SCharles.Forsyth 	f = readsubfont(d, name, fd, d->local == 0);
30*37da2899SCharles.Forsyth 	if(d->local == 0)
31*37da2899SCharles.Forsyth 		lockdisplay(d);
32*37da2899SCharles.Forsyth 	if(f == 0)
33*37da2899SCharles.Forsyth 		_drawprint(2, "getsubfont: can't read %s: %r\n", name);
34*37da2899SCharles.Forsyth 	libclose(fd);
35*37da2899SCharles.Forsyth 	return f;
36*37da2899SCharles.Forsyth }
37