Annotation of researchv9/X11/src/X.V11R1/server/ddx/mfb/maskbits.c, revision 1.1

1.1     ! root        1: /* $Header: maskbits.c,v 1.2 87/09/07 19:04:44 rws Exp $ */
        !             2: /***********************************************************
        !             3: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
        !             4: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
        !             5: 
        !             6:                         All Rights Reserved
        !             7: 
        !             8: Permission to use, copy, modify, and distribute this software and its 
        !             9: documentation for any purpose and without fee is hereby granted, 
        !            10: provided that the above copyright notice appear in all copies and that
        !            11: both that copyright notice and this permission notice appear in 
        !            12: supporting documentation, and that the names of Digital or MIT not be
        !            13: used in advertising or publicity pertaining to distribution of the
        !            14: software without specific, written prior permission.  
        !            15: 
        !            16: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
        !            17: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
        !            18: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            19: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
        !            20: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
        !            21: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
        !            22: SOFTWARE.
        !            23: 
        !            24: ******************************************************************/
        !            25: #include "maskbits.h"
        !            26: #include "servermd.h"
        !            27: 
        !            28: /*
        !            29:    these tables are used by several macros in the mfb code.
        !            30: 
        !            31:    the vax numbers everything left to right, so bit indices on the
        !            32: screen match bit indices in longwords.  the pc-rt and Sun number
        !            33: bits on the screen the way they would be written on paper,
        !            34: (i.e. msb to the left), and so a bit index n on the screen is
        !            35: bit index 32-n in a longword
        !            36: 
        !            37:    see also maskbits.h
        !            38: */
        !            39: 
        !            40: #if (BITMAP_BIT_ORDER == MSBFirst)
        !            41: /* NOTE:
        !            42: the first element in starttab could be 0xffffffff.  making it 0
        !            43: lets us deal with a full first word in the middle loop, rather
        !            44: than having to do the multiple reads and masks that we'd
        !            45: have to do if we thought it was partial.
        !            46: */
        !            47: int starttab[32] =
        !            48:     {
        !            49:        0x00000000,
        !            50:        0x7FFFFFFF,
        !            51:        0x3FFFFFFF,
        !            52:        0x1FFFFFFF,
        !            53:        0x0FFFFFFF,
        !            54:        0x07FFFFFF,
        !            55:        0x03FFFFFF,
        !            56:        0x01FFFFFF,
        !            57:        0x00FFFFFF,
        !            58:        0x007FFFFF,
        !            59:        0x003FFFFF,
        !            60:        0x001FFFFF,
        !            61:        0x000FFFFF,
        !            62:        0x0007FFFF,
        !            63:        0x0003FFFF,
        !            64:        0x0001FFFF,
        !            65:        0x0000FFFF,
        !            66:        0x00007FFF,
        !            67:        0x00003FFF,
        !            68:        0x00001FFF,
        !            69:        0x00000FFF,
        !            70:        0x000007FF,
        !            71:        0x000003FF,
        !            72:        0x000001FF,
        !            73:        0x000000FF,
        !            74:        0x0000007F,
        !            75:        0x0000003F,
        !            76:        0x0000001F,
        !            77:        0x0000000F,
        !            78:        0x00000007,
        !            79:        0x00000003,
        !            80:        0x00000001
        !            81:     };
        !            82: 
        !            83: int endtab[32] =
        !            84:     {
        !            85:        0x00000000,
        !            86:        0x80000000,
        !            87:        0xC0000000,
        !            88:        0xE0000000,
        !            89:        0xF0000000,
        !            90:        0xF8000000,
        !            91:        0xFC000000,
        !            92:        0xFE000000,
        !            93:        0xFF000000,
        !            94:        0xFF800000,
        !            95:        0xFFC00000,
        !            96:        0xFFE00000,
        !            97:        0xFFF00000,
        !            98:        0xFFF80000,
        !            99:        0xFFFC0000,
        !           100:        0xFFFE0000,
        !           101:        0xFFFF0000,
        !           102:        0xFFFF8000,
        !           103:        0xFFFFC000,
        !           104:        0xFFFFE000,
        !           105:        0xFFFFF000,
        !           106:        0xFFFFF800,
        !           107:        0xFFFFFC00,
        !           108:        0xFFFFFE00,
        !           109:        0xFFFFFF00,
        !           110:        0xFFFFFF80,
        !           111:        0xFFFFFFC0,
        !           112:        0xFFFFFFE0,
        !           113:        0xFFFFFFF0,
        !           114:        0xFFFFFFF8,
        !           115:        0xFFFFFFFC,
        !           116:        0xFFFFFFFE
        !           117:     };
        !           118: 
        !           119: /* a hack, for now, since the entries for 0 need to be all
        !           120:    1 bits, not all zeros.
        !           121:    this means the code DOES NOT WORK for segments of length
        !           122:    0 (which is only a problem in the horizontal line code.)
        !           123: */
        !           124: int startpartial[32] =
        !           125:     {
        !           126:        0xFFFFFFFF,
        !           127:        0x7FFFFFFF,
        !           128:        0x3FFFFFFF,
        !           129:        0x1FFFFFFF,
        !           130:        0x0FFFFFFF,
        !           131:        0x07FFFFFF,
        !           132:        0x03FFFFFF,
        !           133:        0x01FFFFFF,
        !           134:        0x00FFFFFF,
        !           135:        0x007FFFFF,
        !           136:        0x003FFFFF,
        !           137:        0x001FFFFF,
        !           138:        0x000FFFFF,
        !           139:        0x0007FFFF,
        !           140:        0x0003FFFF,
        !           141:        0x0001FFFF,
        !           142:        0x0000FFFF,
        !           143:        0x00007FFF,
        !           144:        0x00003FFF,
        !           145:        0x00001FFF,
        !           146:        0x00000FFF,
        !           147:        0x000007FF,
        !           148:        0x000003FF,
        !           149:        0x000001FF,
        !           150:        0x000000FF,
        !           151:        0x0000007F,
        !           152:        0x0000003F,
        !           153:        0x0000001F,
        !           154:        0x0000000F,
        !           155:        0x00000007,
        !           156:        0x00000003,
        !           157:        0x00000001
        !           158:     };
        !           159: 
        !           160: int endpartial[32] =
        !           161:     {
        !           162:        0xFFFFFFFF,
        !           163:        0x80000000,
        !           164:        0xC0000000,
        !           165:        0xE0000000,
        !           166:        0xF0000000,
        !           167:        0xF8000000,
        !           168:        0xFC000000,
        !           169:        0xFE000000,
        !           170:        0xFF000000,
        !           171:        0xFF800000,
        !           172:        0xFFC00000,
        !           173:        0xFFE00000,
        !           174:        0xFFF00000,
        !           175:        0xFFF80000,
        !           176:        0xFFFC0000,
        !           177:        0xFFFE0000,
        !           178:        0xFFFF0000,
        !           179:        0xFFFF8000,
        !           180:        0xFFFFC000,
        !           181:        0xFFFFE000,
        !           182:        0xFFFFF000,
        !           183:        0xFFFFF800,
        !           184:        0xFFFFFC00,
        !           185:        0xFFFFFE00,
        !           186:        0xFFFFFF00,
        !           187:        0xFFFFFF80,
        !           188:        0xFFFFFFC0,
        !           189:        0xFFFFFFE0,
        !           190:        0xFFFFFFF0,
        !           191:        0xFFFFFFF8,
        !           192:        0xFFFFFFFC,
        !           193:        0xFFFFFFFE
        !           194:     };
        !           195: #else          /* LSBFirst */
        !           196: /* NOTE:
        !           197: the first element in starttab could be 0xffffffff.  making it 0
        !           198: lets us deal with a full first word in the middle loop, rather
        !           199: than having to do the multiple reads and masks that we'd
        !           200: have to do if we thought it was partial.
        !           201: */
        !           202: int starttab[32] = 
        !           203:        {
        !           204:        0x00000000,
        !           205:        0xFFFFFFFE,
        !           206:        0xFFFFFFFC,
        !           207:        0xFFFFFFF8,
        !           208:        0xFFFFFFF0,
        !           209:        0xFFFFFFE0,
        !           210:        0xFFFFFFC0,
        !           211:        0xFFFFFF80,
        !           212:        0xFFFFFF00,
        !           213:        0xFFFFFE00,
        !           214:        0xFFFFFC00,
        !           215:        0xFFFFF800,
        !           216:        0xFFFFF000,
        !           217:        0xFFFFE000,
        !           218:        0xFFFFC000,
        !           219:        0xFFFF8000,
        !           220:        0xFFFF0000,
        !           221:        0xFFFE0000,
        !           222:        0xFFFC0000,
        !           223:        0xFFF80000,
        !           224:        0xFFF00000,
        !           225:        0xFFE00000,
        !           226:        0xFFC00000,
        !           227:        0xFF800000,
        !           228:        0xFF000000,
        !           229:        0xFE000000,
        !           230:        0xFC000000,
        !           231:        0xF8000000,
        !           232:        0xF0000000,
        !           233:        0xE0000000,
        !           234:        0xC0000000,
        !           235:        0x80000000
        !           236:        };
        !           237: 
        !           238: int endtab[32] = 
        !           239:        {
        !           240:        0x00000000,
        !           241:        0x00000001,
        !           242:        0x00000003,
        !           243:        0x00000007,
        !           244:        0x0000000F,
        !           245:        0x0000001F,
        !           246:        0x0000003F,
        !           247:        0x0000007F,
        !           248:        0x000000FF,
        !           249:        0x000001FF,
        !           250:        0x000003FF,
        !           251:        0x000007FF,
        !           252:        0x00000FFF,
        !           253:        0x00001FFF,
        !           254:        0x00003FFF,
        !           255:        0x00007FFF,
        !           256:        0x0000FFFF,
        !           257:        0x0001FFFF,
        !           258:        0x0003FFFF,
        !           259:        0x0007FFFF,
        !           260:        0x000FFFFF,
        !           261:        0x001FFFFF,
        !           262:        0x003FFFFF,
        !           263:        0x007FFFFF,
        !           264:        0x00FFFFFF,
        !           265:        0x01FFFFFF,
        !           266:        0x03FFFFFF,
        !           267:        0x07FFFFFF,
        !           268:        0x0FFFFFFF,
        !           269:        0x1FFFFFFF,
        !           270:        0x3FFFFFFF,
        !           271:        0x7FFFFFFF
        !           272:        };
        !           273: 
        !           274: /* a hack, for now, since the entries for 0 need to be all
        !           275:    1 bits, not all zeros.
        !           276:    this means the code DOES NOT WORK for segments of length
        !           277:    0 (which is only a problem in the horizontal line code.)
        !           278: */
        !           279: int startpartial[32] = 
        !           280:        {
        !           281:        0xFFFFFFFF,
        !           282:        0xFFFFFFFE,
        !           283:        0xFFFFFFFC,
        !           284:        0xFFFFFFF8,
        !           285:        0xFFFFFFF0,
        !           286:        0xFFFFFFE0,
        !           287:        0xFFFFFFC0,
        !           288:        0xFFFFFF80,
        !           289:        0xFFFFFF00,
        !           290:        0xFFFFFE00,
        !           291:        0xFFFFFC00,
        !           292:        0xFFFFF800,
        !           293:        0xFFFFF000,
        !           294:        0xFFFFE000,
        !           295:        0xFFFFC000,
        !           296:        0xFFFF8000,
        !           297:        0xFFFF0000,
        !           298:        0xFFFE0000,
        !           299:        0xFFFC0000,
        !           300:        0xFFF80000,
        !           301:        0xFFF00000,
        !           302:        0xFFE00000,
        !           303:        0xFFC00000,
        !           304:        0xFF800000,
        !           305:        0xFF000000,
        !           306:        0xFE000000,
        !           307:        0xFC000000,
        !           308:        0xF8000000,
        !           309:        0xF0000000,
        !           310:        0xE0000000,
        !           311:        0xC0000000,
        !           312:        0x80000000
        !           313:        };
        !           314: 
        !           315: int endpartial[32] = 
        !           316:        {
        !           317:        0xFFFFFFFF,
        !           318:        0x00000001,
        !           319:        0x00000003,
        !           320:        0x00000007,
        !           321:        0x0000000F,
        !           322:        0x0000001F,
        !           323:        0x0000003F,
        !           324:        0x0000007F,
        !           325:        0x000000FF,
        !           326:        0x000001FF,
        !           327:        0x000003FF,
        !           328:        0x000007FF,
        !           329:        0x00000FFF,
        !           330:        0x00001FFF,
        !           331:        0x00003FFF,
        !           332:        0x00007FFF,
        !           333:        0x0000FFFF,
        !           334:        0x0001FFFF,
        !           335:        0x0003FFFF,
        !           336:        0x0007FFFF,
        !           337:        0x000FFFFF,
        !           338:        0x001FFFFF,
        !           339:        0x003FFFFF,
        !           340:        0x007FFFFF,
        !           341:        0x00FFFFFF,
        !           342:        0x01FFFFFF,
        !           343:        0x03FFFFFF,
        !           344:        0x07FFFFFF,
        !           345:        0x0FFFFFFF,
        !           346:        0x1FFFFFFF,
        !           347:        0x3FFFFFFF,
        !           348:        0x7FFFFFFF
        !           349:        };
        !           350: #endif
        !           351: 
        !           352: 
        !           353: /* used for masking bits in bresenham lines
        !           354:    mask[n] is used to mask out all but bit n in a longword (n is a
        !           355: screen position).
        !           356:    rmask[n] is used to mask out the single bit at position n (n
        !           357: is a screen posiotion.)
        !           358: */
        !           359: 
        !           360: #if (BITMAP_BIT_ORDER == MSBFirst)
        !           361: int mask[] =
        !           362:     {
        !           363:     1<<31, 1<<30, 1<<29, 1<<28, 1<<27, 1<<26, 1<<25, 1<<24,
        !           364:     1<<23, 1<<22, 1<<21, 1<<20, 1<<19, 1<<18, 1<<17, 1<<16,
        !           365:     1<<15, 1<<14, 1<<13, 1<<12, 1<<11, 1<<10, 1<<9, 1<<8,
        !           366:     1<<7, 1<<6, 1<<5, 1<<4, 1<<3, 1<<2, 1<<1, 1<<0
        !           367:     }; 
        !           368: int rmask[] = 
        !           369:     {
        !           370:     0xffffffff ^ (1<<31), 0xffffffff ^ (1<<30), 0xffffffff ^ (1<<29),
        !           371:     0xffffffff ^ (1<<28), 0xffffffff ^ (1<<27), 0xffffffff ^ (1<<26),
        !           372:     0xffffffff ^ (1<<25), 0xffffffff ^ (1<<24), 0xffffffff ^ (1<<23),
        !           373:     0xffffffff ^ (1<<22), 0xffffffff ^ (1<<21), 0xffffffff ^ (1<<20),
        !           374:     0xffffffff ^ (1<<19), 0xffffffff ^ (1<<18), 0xffffffff ^ (1<<17),
        !           375:     0xffffffff ^ (1<<16), 0xffffffff ^ (1<<15), 0xffffffff ^ (1<<14),
        !           376:     0xffffffff ^ (1<<13), 0xffffffff ^ (1<<12), 0xffffffff ^ (1<<11),
        !           377:     0xffffffff ^ (1<<10), 0xffffffff ^ (1<<9),  0xffffffff ^ (1<<8),
        !           378:     0xffffffff ^ (1<<7),  0xffffffff ^ (1<<6),  0xffffffff ^ (1<<5),
        !           379:     0xffffffff ^ (1<<4),  0xffffffff ^ (1<<3),  0xffffffff ^ (1<<2),
        !           380:     0xffffffff ^ (1<<1),  0xffffffff ^ (1<<0)
        !           381:     };
        !           382: #else  /* LSBFirst */
        !           383: int mask[] =
        !           384:     {
        !           385:     1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7,
        !           386:     1<<8, 1<<9, 1<<10, 1<<11, 1<<12, 1<<13, 1<<14, 1<<15,
        !           387:     1<<16, 1<<17, 1<<18, 1<<19, 1<<20, 1<<21, 1<<22, 1<<23,
        !           388:     1<<24, 1<<25, 1<<26, 1<<27, 1<<28, 1<<29, 1<<30, 1<<31
        !           389:     }; 
        !           390: int rmask[] = 
        !           391:     {
        !           392:     0xffffffff ^ (1<<0), 0xffffffff ^ (1<<1), 0xffffffff ^ (1<<2),
        !           393:     0xffffffff ^ (1<<3), 0xffffffff ^ (1<<4), 0xffffffff ^ (1<<5),
        !           394:     0xffffffff ^ (1<<6), 0xffffffff ^ (1<<7), 0xffffffff ^ (1<<8),
        !           395:     0xffffffff ^ (1<<9), 0xffffffff ^ (1<<10), 0xffffffff ^ (1<<11),
        !           396:     0xffffffff ^ (1<<12), 0xffffffff ^ (1<<13), 0xffffffff ^ (1<<14),
        !           397:     0xffffffff ^ (1<<15), 0xffffffff ^ (1<<16), 0xffffffff ^ (1<<17),
        !           398:     0xffffffff ^ (1<<18), 0xffffffff ^ (1<<19), 0xffffffff ^ (1<<20),
        !           399:     0xffffffff ^ (1<<21), 0xffffffff ^ (1<<22), 0xffffffff ^ (1<<23),
        !           400:     0xffffffff ^ (1<<24), 0xffffffff ^ (1<<25), 0xffffffff ^ (1<<26),
        !           401:     0xffffffff ^ (1<<27), 0xffffffff ^ (1<<28), 0xffffffff ^ (1<<29),
        !           402:     0xffffffff ^ (1<<30), 0xffffffff ^ (1<<31)
        !           403:     };
        !           404: #endif
        !           405: 

unix.superglobalmegacorp.com

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