Annotation of 43BSD/contrib/X/libqvss/ddxtextutil.c, revision 1.1.1.1

1.1       root        1: /* Copyright 1985, Massachusetts Institute of Technology */
                      2: 
                      3: /* textutil.c  text related utility routines.
                      4:  *
                      5:  *     CopyText        Copy text to bitmap
                      6:  *     TextWidth       Returns width of a piece of text in a font
                      7:  *     CharWidth       Returns width of a character in a font
                      8:  *
                      9:  */
                     10: 
                     11: #include "ddxqvss.h"
                     12: #include "vstagbl.h"
                     13: 
                     14: CopyText (string, strlen, font, bm)
                     15:        register char *string;
                     16:        register int strlen;
                     17:        FONT *font;
                     18:        register BITMAP *bm;
                     19: {
                     20: 
                     21:        int dstx,srcx,w,h;
                     22:        FontPriv *pfont;
                     23:        BITMAP *fbm;
                     24: 
                     25:        pfont = FDATA(font);
                     26:        fbm = pfont->strike;
                     27: 
                     28:        dstx = 0;
                     29:        h = font->height;
                     30: 
                     31:        while (strlen--)
                     32:                {
                     33: 
                     34:                /* SET THE WIDTH OF THE CHARACTER */
                     35: 
                     36:                w = pfont->widths[*string];
                     37:                srcx = pfont->leftarray[*string++];
                     38: 
                     39:                /* CALL THE COPY BITMAP PROCEDURE TO COPY THE CHARACTER
                     40:                   FROM THE FONT BITMAP TO THE DESTINATION BITMAP */
                     41: 
                     42:                copyrmsk(VSTA$K_SRC_BITMAP, (short *)fbm->data, fbm->width,
                     43:                         fbm->height, srcx, 0, w, h, 
                     44:                         (short *)bm->data, bm->width, bm->height, dstx, 0,
                     45:                         VSTA$K_MAP_SRC, 0, 0);
                     46: 
                     47:                /* ADD THE WIDTH OF THE CHARACTER TO THE DST OFFSET */
                     48: 
                     49:                dstx += w;
                     50: 
                     51:                };
                     52: }
                     53: 
                     54: /* Returns the width of a string in a font */
                     55: 
                     56: int TextWidth (string, strlen, spacepad, font)
                     57:        register char *string;
                     58:        register int strlen;
                     59:        int spacepad;
                     60:        register FONT *font;
                     61: {
                     62:        register unsigned int c;
                     63:        register short *widths;
                     64:        int width = 0;
                     65: 
                     66:        if (font->fixed) {
                     67:            width = strlen * font->avg_width;
                     68:            if (spacepad) {
                     69:                while (--strlen >= 0)
                     70:                    if (*string++ == font->space)
                     71:                        width += spacepad;
                     72:            }
                     73:        } else {
                     74:            widths = FDATA(font)->widths;
                     75:            while (--strlen >= 0) {
                     76:                c = *string++;
                     77:                if (c >= font->first && c <= font->last) {
                     78:                    if (c == font->space)
                     79:                        width += spacepad;
                     80:                    width += widths[c - font->first];
                     81:                }
                     82:            }
                     83:        }
                     84: 
                     85:        return (width);
                     86: }
                     87: 
                     88: /* Returns width of a character in a font. */
                     89: 
                     90: int CharWidth(c, font)
                     91:        register unsigned int c;
                     92:        register FONT *font;
                     93: {
                     94: 
                     95:        if (c < font->first || c > font->last)
                     96:            return (0);
                     97:        else if (font->fixed)
                     98:            return (font->avg_width);
                     99:        else
                    100:            return (FDATA(font)->widths[c - font->first]);
                    101: }

unix.superglobalmegacorp.com

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