Annotation of researchv9/X11/src/X.V11R1/lib/X/XFontInfo.c, revision 1.1.1.1

1.1       root        1: #include "copyright.h"
                      2: 
                      3: /* $Header: XFontInfo.c,v 11.8 87/09/11 08:08:46 toddb Exp $ */
                      4: /* Copyright    Massachusetts Institute of Technology    1986  */
                      5: #define NEED_REPLIES
                      6: #include "Xlibint.h"
                      7: 
                      8: char **XListFontsWithInfo(dpy, pattern, maxNames, actualCount, info)
                      9: register Display *dpy;
                     10: char *pattern;  /* null-terminated */
                     11: int maxNames;
                     12: int *actualCount;
                     13: XFontStruct **info;
                     14: {       
                     15:     register long nbytes;
                     16:     register int i;
                     17:     register XFontStruct *fs;
                     18:     register int size = 0;
                     19:     XFontStruct *finfo = NULL;
                     20:     char **flist = NULL;
                     21:     xListFontsWithInfoReply reply;
                     22:     register xListFontsReq *req;
                     23: 
                     24:     LockDisplay(dpy);
                     25:     GetReq(ListFontsWithInfo, req);
                     26:     req->maxNames = maxNames;
                     27:     nbytes = req->nbytes = strlen (pattern);;
                     28:     req->length += (nbytes + 3) >> 2;
                     29:     _XSend (dpy, pattern, nbytes);
                     30:     /* use _XSend instead of Data, since subsequent _XReply will flush buffer */
                     31: 
                     32:     for (i = 0; ; i++) {
                     33:        if (!_XReply (dpy, (xReply *) &reply,
                     34:           ((sizeof (reply) - sizeof (xGenericReply)) >> 2), xFalse))
                     35:                return (NULL);
                     36:        if (reply.nameLength == 0)
                     37:            break;
                     38:        if ((i + reply.nReplies) >= size) {
                     39:            size = i + reply.nReplies + 1;
                     40:            if (finfo) {
                     41:                finfo = (XFontStruct *) Xrealloc ((char *) finfo,
                     42:                                                  sizeof (XFontStruct) * size);
                     43:                flist = (char **) Xrealloc ((char *) flist,
                     44:                                            sizeof (char *) * size);
                     45:            } else {
                     46:                finfo = (XFontStruct *) Xmalloc (sizeof (XFontStruct) * size);
                     47:                flist = (char **) Xmalloc (sizeof (char *) * size);
                     48:            }
                     49:        }
                     50:        fs = &finfo[i];
                     51: 
                     52:        fs->ext_data            = NULL;
                     53:        fs->per_char            = NULL;
                     54:        fs->fid                 = None;
                     55:        fs->direction           = reply.drawDirection;
                     56:        fs->min_char_or_byte2   = reply.minCharOrByte2;
                     57:        fs->max_char_or_byte2   = reply.maxCharOrByte2;
                     58:        fs->min_byte1           = reply.minByte1;
                     59:        fs->max_byte1           = reply.maxByte1;
                     60:        fs->default_char        = reply.defaultChar;
                     61:        fs->all_chars_exist     = reply.allCharsExist;
                     62:        fs->ascent              = reply.fontAscent;
                     63:        fs->descent             = reply.fontDescent;
                     64:     
                     65:        /* XXX the next two statements won't work if short isn't 16 bits */
                     66: 
                     67:        fs->min_bounds = * (XCharStruct *) &reply.minBounds;
                     68:        fs->max_bounds = * (XCharStruct *) &reply.maxBounds;
                     69: 
                     70:        fs->n_properties = reply.nFontProps;
                     71:        if (fs->n_properties > 0) {
                     72:            nbytes = reply.nFontProps * sizeof (XFontProp);
                     73:            fs->properties = (XFontProp *) Xmalloc ((unsigned int) nbytes);
                     74:            _XRead (dpy, (char *)fs->properties, nbytes);
                     75:        } else
                     76:            fs->properties = NULL;
                     77:        flist[i] = (char *) Xmalloc ((unsigned int) (reply.nameLength + 1));
                     78:        flist[i][reply.nameLength] = '\0';
                     79:        _XReadPad (dpy, flist[i], reply.nameLength);
                     80:     }
                     81:     *info = finfo;
                     82:     *actualCount = i;
                     83:     UnlockDisplay(dpy);
                     84:     SyncHandle();
                     85:     return (flist);
                     86: }
                     87: 
                     88: XFreeFontInfo (names, info, actualCount)
                     89: char **names;
                     90: XFontStruct *info;
                     91: int actualCount;
                     92: {
                     93:        register int i;
                     94:        if (names != NULL) {
                     95:                for (i = 0; i < actualCount; i++) {
                     96:                        Xfree (names[i]);
                     97:                }
                     98:                Xfree((char *) names);
                     99:        }
                    100:        if (info != NULL) {
                    101:                for (i = 0; i < actualCount; i++) {
                    102:                        if (info[i].properties != NULL) 
                    103:                                Xfree ((char *) info[i].properties);
                    104:                        }
                    105:                Xfree((char *) info);
                    106:        }
                    107: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.