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