Annotation of 43BSDTahoe/new/X/libqvss/ddxbitpix.c, revision 1.1

1.1     ! root        1: /* Copyright 1985 Massachusetts Institute of Technology */
        !             2: 
        !             3: /* Routines to cache bitmaps and pixmaps in the frame buffer memory:
        !             4:  *
        !             5:  *     StoreBitmap     Creates a bitmap
        !             6:  *     FreeBitmap      Frees the storage taken by a bitmap
        !             7:  *     CharBitmap      Creates a bitmap from a font character
        !             8:  *     StorePixmap     Creates a pixmap
        !             9:  *     FreePixmap      Frees the storage taken by a pixmap
        !            10:  *     MakePixmap      Create a pixmap from a bitmap
        !            11:  *     PixmapSave      Save a region of the screen
        !            12:  *     PixmapGet       Read a region of the screen
        !            13:  *
        !            14:  */
        !            15: 
        !            16: #include "ddxqvss.h"
        !            17: #include "vstagbl.h"
        !            18: #include <errno.h>
        !            19: 
        !            20: extern int errno;
        !            21: 
        !            22: 
        !            23: char *Xalloc(), *AllocateSpace();
        !            24: PIXMAP *MakePixmap();
        !            25: 
        !            26: BITMAP *StoreBitmap (width, height, data)
        !            27:        int width, height;
        !            28:        char *data;
        !            29: {
        !            30:        register BITMAP *bm;
        !            31:        int size;
        !            32: 
        !            33:        bm = (BITMAP *) Xalloc (sizeof (BITMAP));
        !            34:        bm->width = width;
        !            35:        bm->height = height;
        !            36:        bm->refcnt = 1;
        !            37: 
        !            38:        size = BitmapSize(width, height);
        !            39:        if ((bm->data = (caddr_t) malloc (size)) == NULL) {
        !            40:            free ((caddr_t) bm);
        !            41:            return (NULL);
        !            42:        }
        !            43: 
        !            44:        bcopy (data, bm->data, size);
        !            45: 
        !            46:        return (bm);
        !            47: }
        !            48: 
        !            49: FreeBitmap (bitmap)
        !            50:        register BITMAP *bitmap;
        !            51: {
        !            52:        free ((caddr_t) bitmap->data);
        !            53:        free ((caddr_t) bitmap);
        !            54: }
        !            55: 
        !            56: BITMAP *CharBitmap (c, font)
        !            57:        unsigned c;
        !            58:        register FONT *font;
        !            59: {
        !            60:        int width;
        !            61:        register BITMAP *bm;
        !            62: 
        !            63:        if (c < font->first || c > font->last) {
        !            64:            errno = EINVAL;
        !            65:            return (NULL);
        !            66:        }
        !            67:        if (font->fixed)
        !            68:            width = font->avg_width;
        !            69:        else
        !            70:            width = FDATA(font)->widths[c];
        !            71:        if (width == 0) {
        !            72:            errno = EINVAL;
        !            73:            return (NULL);
        !            74:        }
        !            75:        bm = (BITMAP *) Xalloc (sizeof (BITMAP));
        !            76:        bm->width = width;
        !            77:        bm->height = font->height;
        !            78:        bm->refcnt = 1;
        !            79:        if ((bm->data = 
        !            80:            (caddr_t) malloc (BitmapSize(width, bm->height))) == NULL) {
        !            81:            free ((caddr_t) bm);
        !            82:            errno = ENOMEM;
        !            83:            return (NULL);
        !            84:        }
        !            85: 
        !            86:        CopyText ((caddr_t) &c, 1, font, bm);
        !            87:        return (bm);
        !            88: }
        !            89: 
        !            90: /*ARGSUSED*/
        !            91: PIXMAP *StorePixmap (width, height, format, data)
        !            92:        int width, height, format;
        !            93:        char *data;
        !            94: {
        !            95:        register BITMAP *bm;
        !            96:        register PIXMAP *pm;
        !            97: 
        !            98:        bm = (BITMAP *) StoreBitmap (width, height, data);
        !            99:        if (bm == NULL)
        !           100:            return (NULL);
        !           101:        bm->refcnt = 0;
        !           102:        if (pm = MakePixmap (bm, 1, 0))
        !           103:            return (pm);
        !           104:        FreeBitmap (bm);
        !           105:        return (NULL);
        !           106: }
        !           107: 
        !           108: FreePixmap (pixmap)
        !           109:        register PIXMAP *pixmap;
        !           110: {
        !           111:        register BITMAP *bm;
        !           112: 
        !           113:        if (pixmap->kind) {
        !           114:            bm = PDATA(pixmap);
        !           115:            if (--bm->refcnt == 0)
        !           116:                FreeBitmap (bm);
        !           117:        }
        !           118:        free ((caddr_t) pixmap);
        !           119: }
        !           120: 
        !           121: PIXMAP constpix0 = {1, 1, 1, 1, ConstantPixmap, (caddr_t) 0};
        !           122: PIXMAP constpix1 = {1, 1, 1, 1, ConstantPixmap, (caddr_t) 1};
        !           123: 
        !           124: PIXMAP *MakePixmap (xymask, fore, back)
        !           125:        register BITMAP *xymask;
        !           126:        int fore, back;
        !           127: {
        !           128:        register PIXMAP *pm;
        !           129: 
        !           130:        if (xymask == NULL || !((fore ^ back) & 1)) {
        !           131:            if (fore & 1)
        !           132:                pm = &constpix1;
        !           133:            else
        !           134:                pm = &constpix0;
        !           135:            pm->refcnt++;
        !           136:            return (pm);
        !           137:        }
        !           138: 
        !           139:        pm = (PIXMAP *) Xalloc (sizeof (PIXMAP));
        !           140:        pm->width = xymask->width;
        !           141:        pm->height = xymask->height;
        !           142:        pm->refcnt = 1;
        !           143:        xymask->refcnt++;
        !           144:        pm->kind = BitmapPixmap;
        !           145:        pm->data = (caddr_t) xymask;
        !           146:        if (xymask->width == 16 && xymask->height == 16) {
        !           147:            pm->tile = CanBeTiled;
        !           148:        } else {
        !           149:            pm->tile = CannotBeTiled;
        !           150:        }
        !           151:        /* save a bit to indicate if we have to invert the source */
        !           152: 
        !           153:        if (back & 1)
        !           154:            pm->kind |= InvertFlag;
        !           155:        return (pm);
        !           156: }
        !           157: 
        !           158: PIXMAP *PixmapSave (srcx, srcy, width, height)
        !           159:        int srcx, srcy, width, height;
        !           160: {
        !           161:        register BITMAP *bm;
        !           162:        PIXMAP *pm;
        !           163:        extern BITMAP pbm;
        !           164: 
        !           165:        bm = (BITMAP *) Xalloc (sizeof (BITMAP));
        !           166:        bm->width = width;
        !           167:        bm->height = height;
        !           168:        bm->refcnt = 0;
        !           169: 
        !           170:        if ((bm->data = 
        !           171:                (caddr_t) malloc (BitmapSize(width, height))) == NULL) {
        !           172:            free ((caddr_t) bm);
        !           173:            return (NULL);
        !           174:        }
        !           175:        copyrmsk(VSTA$K_SRC_BITMAP, (short *) pbm.data, pbm.width, pbm.height,
        !           176:                srcx, srcy, width, height,
        !           177:                (short *) bm->data, width, height,
        !           178:                0, 0, GXcopy, 0, 0);
        !           179:        if (pm = MakePixmap (bm, 1, 0))
        !           180:            return (pm);
        !           181:        FreeBitmap (bm);
        !           182:        return (NULL);
        !           183: }
        !           184: 
        !           185: /*ARGSUSED*/
        !           186: PixmapGet (srcx, srcy, width, height, client, format, swapit)
        !           187:        int srcx, srcy, width, height, client, format;
        !           188: {
        !           189:        PIXMAP *pm;
        !           190:        BITMAP *bm;
        !           191:        int slop;
        !           192:        char padding[2];
        !           193:        int size = BitmapSize(width, height);
        !           194:        slop = size & 2;
        !           195:        pm = PixmapSave (srcx, srcy, width, height);
        !           196:        bm = (BITMAP *) pm->data;
        !           197:        if (swapit)
        !           198:                Swap_shorts ( (short *) bm->data, size >> 1 );
        !           199:        Write (client, bm->data, size);
        !           200:        FreePixmap(pm);
        !           201:        if (slop)
        !           202:                Write (client, padding, slop);
        !           203: }

unix.superglobalmegacorp.com

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