|
|
1.1 root 1: #include "copyright.h"
2:
3: /* $Header: XFontNames.c,v 11.17 87/09/11 08:03:23 toddb Exp $ */
4: /* Copyright Massachusetts Institute of Technology 1986 */
5: #define NEED_REPLIES
6: #include "Xlibint.h"
7:
8: char **XListFonts(dpy, pattern, maxNames, actualCount)
9: register Display *dpy;
10: char *pattern; /* null-terminated */
11: int maxNames;
12: int *actualCount; /* RETURN */
13: {
14: register long nbytes;
15: register int i;
16: register int length;
17: char **flist;
18: char *ch;
19: xListFontsReply rep;
20: register xListFontsReq *req;
21:
22: LockDisplay(dpy);
23: GetReq(ListFonts, req);
24: req->maxNames = maxNames;
25: nbytes = req->nbytes = strlen (pattern);;
26: req->length += (nbytes + 3) >> 2;
27: _XSend (dpy, pattern, nbytes);
28: /* use _XSend instead of Data, since following _XReply will flush buffer */
29:
30: (void) _XReply (dpy, (xReply *)&rep, 0, xFalse);
31: *actualCount = rep.nFonts;
32: if (*actualCount) {
33: flist = (char **)Xmalloc ((unsigned)rep.nFonts * sizeof(char *));
34: ch = (char *) Xmalloc((unsigned)(rep.length * 4) + 1);
35: /* +1 to leave room for last null-terminator */
36: _XReadPad (dpy, ch, (long)(rep.length * 4));
37: /*
38: * unpack into null terminated strings.
39: */
40: length = *ch;
41: for (i = 0; i < rep.nFonts; i++) {
42: flist[i] = ch + 1; /* skip over length */
43: ch += length + 1; /* find next length ... */
44: length = *ch;
45: *ch = '\0'; /* and replace with null-termination */
46: }
47: }
48: else flist = NULL;
49: UnlockDisplay(dpy);
50: SyncHandle();
51: return (flist);
52: }
53:
54: XFreeFontNames(list)
55: char **list;
56: {
57: if (list != NULL) {
58: Xfree (list[0]-1);
59: Xfree ((char *)list);
60: }
61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.